尝试创建我定义和导入的模式实例时,我得到了一个JS TypeError: undefined is not a function
。
article.js
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
// Article Schema
var ArticleSchema = new Schema({
title : { type: String, required: true, index: { unique: true }},
author : { type: String, required: true },
day : { type: String, required: true },
month : { type: String, required: true },
year : { type: String, required: true },
link : { type: String, required: true },
password : { type: String, required: false, select: false }
});
module.exports = mongoose.model("Article", ArticleSchema);
api.js
var bodyParser = require("body-parser"); // get body-parser
var article = require("../models/article");
var config = require("../../config");
module.exports = function(app, express) {
var apiRouter = express.Router();
// Some stuff
var article = new article(); // create a new instance of the article model
// ...
当api尝试创建新文章时会抛出错误,这里是完整错误的屏幕截图:
第34:34行是我尝试发表新文章的时候。
我知道这个问题一直都会被问到,如果错误是非常愚蠢的,我很抱歉,但我经历了20个不同的" TypeError:undefined"问题,在里面尝试不同的事情,我不能为我的生活解决它。
答案 0 :(得分:3)
您正在声明一个名为“文章”的变量。这与您导入的模块使用的名称相同,因此您的本地变量将隐藏更全局的变量。变量从没有值开始,因此它们是undefined
。
如果您更改了本地变量名称,那么假设您的导出设置正确,您将能够访问构造函数。
答案 1 :(得分:3)
使用其他名称:如果您执行var article
,则会覆盖初始var article
,因此无效。
好的做法是对ModelNames使用大写:
var bodyParser = require("body-parser"); // get body-parser
var Article = require("../models/article");
var config = require("../../config");
module.exports = function(app, express) {
var apiRouter = express.Router();
// Some stuff
var article = new Article(); // create a new instance of the article model
// ...
尝试这样,现在应该工作:)