Mongoose Model别名错误

m_v*_*eek 3 alias mongoose mongodb node.js

Mongoose是MongoDB的一个ODM,我有一个有趣的问题.

我想mongoose.model简单地将方法别名Model.我甚至检查了别名:

exports = Model = mongoose.model;
console.log(Model === mongoose.model); // returns true
Run Code Online (Sandbox Code Playgroud)

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

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

Model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

/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)
Run Code Online (Sandbox Code Playgroud)

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

mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)
  • 这是一个错误Mongoose.js ODM或我错过了什么?

Joh*_*yHK 22

当你调用时mongoose.model(...),mongoose对象将被传递给model函数as this.当您通过别名调用该函数时,this将设置为global而不是mongoose.

如果你真的想这样做,你必须做以下事情:

var Model = mongoose.model.bind(mongoose);
Run Code Online (Sandbox Code Playgroud)

这样,mongoose无论你如何调用,它都会被传递给函数Model.