Javascript TypeError:初始化实例时,undefined不是函数

时间:2015-02-12 16:13:25

标签: javascript node.js express

尝试创建我定义和导入的模式实例时,我得到了一个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尝试创建新文章时会抛出错误,这里是完整错误的屏幕截图:

TypeError

第34:34行是我尝试发表新文章的时候。

我知道这个问题一直都会被问到,如果错误是非常愚蠢的,我很抱歉,但我经历了20个不同的" TypeError:undefined"问题,在里面尝试不同的事情,我不能为我的生活解决它。

2 个答案:

答案 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

// ...

尝试这样,现在应该工作:)