我在获取数据时遇到了一些问题。
我有猫鼬计划。
PostSchema.methods.getAuthor = function () {
this.model('User').findById(this.author).exec(function (err, author){
if (author) {
console.log(author.username);
return author.username;
};
});
};
mongoose.model('Post', PostSchema);
和getMethod
exports.getPost = function (req, res) {
return Post.findById(req.params.id, function (err, post) {
if (!post) {
res.statusCode = 404;
return res.send({ error: 'Not found' });
}
if (!err) {
var author = post.getAuthor();
console.log('author is: ', author);
return res.send({ status: 'OK', post:post });
} else {
res.statusCode = 500;
return res.send({ error: 'Server error' });
}
});
};
当我在post.getAuthor()
方法中调用getPost
时,他正在工作并找到了用户ID。但var author = post.getAuthor();
有undefined
值。
答案 0 :(得分:3)
正如@zaynetro所说,你错误地调用了getAuthor
方法。这是一个异步方法,所以你应该接受一个回调参数,或者你可以返回一个promise。
但是你要做的事情已经内置于mongoose,它的被称为查询群体。
http://mongoosejs.com/docs/populate.html
您可以为您配置一个可以让mongoose解析的Post.author引用属性。
var postSchema = Schema({
author: {
type: Schema.Types.ObjectId,
ref: 'User'
}
});
mongoose.model('Post', postSchema);
var userSchma = Schema({
name: String
});
mongoose.model('User', userSchema);
然后,在您的路线中,您的查询将如下所示:
Post
.findById(req.params.id)
.populate('author')
.exec(function(err, post) {
if (err) {
return res.status(500).send({
error: 'Server error'
});
}
// post.author contains the content of your author document
return res.send(post);
});