我正在尝试弄清楚如何在节点应用程序中使用mongoose基于ID加载用户。我来自php / mysql背景,我很难弄清楚如何在node + mongoose中将这一切联系在一起。有人可以帮助我改进/修复这个例子吗?
模型models / user.js
var mongoose = require('mongoose')
, Schema = mongoose.Schema;
var userSchema = new Schema({
facebookProfile: {},
facebookPages: { type: Array },
created: {type: Date, default: Date.now}
});
userSchema.methods = {
getManagedPages: function(){
return this.facebookPages;
}
}
userSchema.statics = {
load: function(userid){
return this.findById(userid);
}
}
module.exports = mongoose.model('User', userSchema);
控制器controller / user.js中的
var User = mongoose.model("User");
var currentUser = new User();
currentUser = currentUser.load(req.user._id);
我得到的错误是:
TypeError:Object {_id:52861322f38d7ded3f000001,创建时间:11月15日星期五 2013 13:27:14 GMT + 0100(CET),facebookPages:[]}没有方法'加载' 在exports.profile
答案 0 :(得分:1)
检查Mongoose Queries并在用户模型中添加
exports.load(userid, callback){
var query = User.findOne( {//User is your mongoose.model("User"); variable
'userid' : userid
});
query.select('userId name email');
query.exec(function(err, result) {
if (err) {
// Error
callback(err);
} else {
if (result.length == 0) {
// User not Exists
callback(false, result);
}
else {
// User Exists. Process result
}
}
});
}
编辑:使用回调更新了代码
更改 currentUser = currentUser.load(req.user._id); 回调函数
currentUser.load(req.user._id, function(err,result){
if(err){//handle err
}
else{
currentUser = result.userid;
}
});
注意:它是伪代码