mongoose模型静态方法的types错误
我使用node.js和MongoDb驱动程序Mongoose 3.6.1 。 这是我的模式定义:
车型/ user.js的
var mongoose = require('mongoose'), Schema = mongoose.Schema; var userSchema = new Schema({ ... }); module.exports = { model : mongoose.model('User', userSchema) }; userSchema.statics.doSomething = function () { console.log("I'm doing something"); }
然后在一个单独的控制器,我这样做
控制器/ another.js
var User = require("../models/user").model; function foo() { User.doSomething(); }
我得到以下错误
[TypeError: Object function model(doc, fields, skipId) { if (!(this instanceof model)) return new model(doc, fields, skipId); Model.call(this, doc, fields, skipId); } has no method 'doSomething']
但是,如果我转储User
对象,我可以看到那里的方法,如预期的那样。 这是转储确认的相关部分
... schema: { statics: { doSomething: [Function] } ...
任何想法,我在做什么错了?
您需要在创build模型之前设置静态方法:
userSchema.statics.doSomething = function () { var User = mongoose.model('User'); // I think 'this' also points to the User model here: // var User = this; // var user = new User(...); console.log("I'm doing something"); } module.exports = { model : mongoose.model('User', userSchema) };
模型使用Mongoose术语,从模式“编译”。 一旦创build了模型,对模式的任何更改都不会传播到从中派生的模型。