javascript - Mongoose 类型错误 : object is not a function when instantiating object of a schema type

标签 javascript node.js mongodb mongoose

我遇到的问题是 Mongoose 不允许我在“pre”方法内实例化不同架构的架构类型的对象。

我有 2 个模式 - 'User' 和 'Tickit'。

用户.js

var mongoose = require('mongoose');
var bcrypt   = require('bcrypt-nodejs');
var Schema   = mongoose.Schema;
var Tickit   = require('../models/Tickit');

var userSchema = new Schema({
    email        : String,
    password     : String,
    tickits      : [Tickit.tickitSchema]

});

userSchema.methods.generateHash = function(password) {
    return bcrypt.hashSync(password, bcrypt.genSaltSync(8), null);
};

userSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password, this.password);
};

module.exports = mongoose.model('User', userSchema);

和 Tickit.js

var mongoose    = require('mongoose');
var User        = require('../models/User');
var Schema      = mongoose.Schema;
var tickitSchema = new Schema({
    title: String,
    description: String,
    author : { type: Schema.Types.ObjectId, ref: 'User' },
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}]
});

tickitSchema.pre('save', function(next){

    var user = new User();
    user.tickits.push ({id:this._id});
    user.save(function(err){
        if(err)
            res.send(err)

            .populate('tickits')

            .exec(function(err, blah){
                if(err) res.send(err);
            })
        res.json(blah); 
    })
    next();
})
module.exports = mongoose.model('Tickit', tickitSchema);

我尝试使用 Tickit 中的 pre 方法执行的操作是在每次创建 Tickit 时使用该 Tickit 的 id 填充用户架构中的“Tickits”数组。

但是在我的应用程序中,当我创建一个tickit时,应用程序崩溃并收到此错误

var user = new User();
        ^

TypeError: object is not a function

最佳答案

尝试在函数内定义用户:

tickitSchema.pre('save', function(next){

   var User = require('../models/User');    

   // Code

});

关于javascript - Mongoose 类型错误 : object is not a function when instantiating object of a schema type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29488287/

相关文章:

javascript - 在 Angular 2 中,除了两组引号之外,是否有更好的方法通过输入传递字符串?

json - Nodejs将json写入文件

java - Angularjs调用java函数

javascript - jQuery 无法在 Ajax 上加载

javascript - 如何修改 JQuery 自动完成以获取大于指定长度的字符?

javascript - 如何在 Node.js 测试中关闭 net.Server?

javascript - array.push(SomeObject) 不会复制 SomeObject 中包含的数组

mongodb - 在 MongoDB 中为基于时间的查询选择一个好的分片键

.net - Azure 上的 MongoDB : VM or Worker role?

javascript - 如何在 i18next 中使用 Knockout observables?