2015-04-07 99 views
2

我遇到的問題是,貓鼬不讓我實例化一個不同於'pre'方法的模式類型的對象架構。Mongoose TypeError:實例化模式類型的對象時,對象不是函數

我有2個模式 - '用戶'和'Tickit'。

user.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審覈預方法做的就是填充 'Tickits' 陣列在用戶模式與每次創建Tickit時該Tickit的ID。

然而,在我的應用程序,當我做創建TickIT審覈,該應用程序崩潰,我得到這個錯誤

var user = new User(); 
     ^

TypeError: object is not a function 
+0

你找到答案嗎? – Erez

回答

0

嘗試定義自己的函數中的用戶:

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

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

    // Code 

}); 
+0

這工作!謝謝。在發佈了創建新用戶不是我需要做的事情之後,我很快意識到這一點。相反,我應該使用剛剛創建的tickit的id填充_existing_(當前登錄的)用戶的tickits數組 – frank

相關問題