簡體   English   中英

對於貓鼬模型的靜態方法的TypeError

[英]TypeError on static method of mongoose model

我正在使用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] }
...

關於我做錯了什么的任何想法?

您需要創建模型之前設置靜態方法:

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術語的模型是從模式“編譯”的。 創建模型后,對模式的任何更改都不會傳播到從中派生的模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM