2016-11-24 91 views
1

在我app.js我要求我的模型像救猫鼬()是不是一个函数

var User = require('./models/user'); 
app.post('/user/add', function(req,res,next){ 
    var newUser = new User(); 
    newUser.add(req.body.name, function(response){ 
    res.json(response); 
    }) 
}); 

和我的模型(user.js的)这个样子

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var userSchema = new Schema({ 
    name: String 
}); 
var User = module.exports = mongoose.model('user', userSchema); 
module.exports.add = function(name,callback){ 
    User.save({name:name}).exec(callback); 
} 

但我得到的错误newUser.add不是函数吗?

回答

5

如果你想实例方法添加到猫鼬模型,你应该使用instance methods语法:

var mongoose = require('mongoose'); 

var UserSchema = new mongoose.Schema({ 
    name: String 
}); 

// Instance methods 
UserSchema.methods.add = function(name, callback){ 
    this.name = name; 
    return this.save(callback); 
} 

module.exports = mongoose.model('User', UserSchema); 
+0

为什么一定要我用userSchema.methods? –

+3

因为是猫鼬的方法来生成模型实例,当你取得与猫鼬会造成这种方法的用户对象的数据。它像定义用户“原型” – Dario

+0

@JessieEmerson这是猫鼬的事情。这应有助于:http://mongoosejs.com/docs/guide.html看看实例方法。 –

1

方法可以用方法来添加关键字这样

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var userSchema = new Schema({ 
    name: String 
}); 

userSchema.methods.add = function(name,callback){  
    User.save({name:name}).exec(callback); // not checking logic 
} 
var User = module.exports = mongoose.model('user', userSchema); 
+0

这是仅用于.save方法吗?我记得我从来没有这样做过。 –

+0

用户没有定义 –

+0

我提到的评论,我不检查逻辑,只是解决问题如何添加方案与模式 – Ash

0

你能做到如下:

var mongoose = require('mongoose'); 
var Schema = Mongoose.Schema; 

//schema is declared here 
var userSchema = new Schema({ 
    name: String 
}); 

var user = Mongoose.model('User', UserSchema); 

//here we are assigning new data to user collection 
//this record will not be saved here 
//it will only check the schema is matching or not 
//if record is matching to schema then it will assign '_id' to that record 
var userRec = new user({"name":"Jessie Emerson"}); 

userRec.save(function(error, userDoc) { 

    //this is the callback function 
}); 

如果您需要更多的澄清,然后请comm在这个答案。 :-)