Mongoose Model别名错误

时间:2013-07-31 01:30:09

标签: node.js mongodb mongoose alias

我和Mongoose之间有一个有趣的问题,Mongoose是MongoDB的ODM之一。

我想将mongoose.model方法简化为Model。我甚至检查了别名:

exports = Model = mongoose.model;
console.log(Model === mongoose.model); // returns true

我已经为mongoose.Schema做了这个,并且它无缝地工作。

现在,当我使用别名Model变量注册模式时:

Model('User', UserSchema);

我收到以下错误:

/node_modules/mongoose/lib/index.js:257
  if (!this.modelSchemas[name]) {
                        ^
TypeError: Cannot read property 'User' of undefined
    at Mongoose.model (/node_modules/mongoose/lib/index.js:257:25)
    at Object.<anonymous> (/app/models/user.js:20:1)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at controllers_path (/app.js:23:2)
    at Array.forEach (native)

但如果我使用普通形式,我绝对没有错误:

mongoose.model('User', UserSchema);
  • 这是Mongoose.js ODM中的错误还是我错过了什么?

2 个答案:

答案 0 :(得分:22)

当您致电mongoose.model(...)时,mongoose对象将作为model传递到this函数。当您通过别名调用该函数时,this将设置为global而不是mongoose

如果你真的想要这样做,你必须做类似的事情:

var Model = mongoose.model.bind(mongoose);

这样,无论你如何调用mongooseModel都会被传递到函数中。

答案 1 :(得分:2)

请详细说明@JohnnyHK回答:

var a = {
    b:function(){
        console.log(this.name)
    },
    name:"its a"
}
a.b() //logs "its a"
var c = a.b;
c(); //logs undefined

调用c时,调用上下文是窗口或全局对象。