gpt4 book ai didi

javascript - Nodejs 和 Mongoose 数据获取

转载 作者:可可西里 更新时间:2023-11-01 09:35:55 25 4
gpt4 key购买 nike

我在获取数据时遇到了一些问题。

我有 Mongoose 方案。

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);

和获取方法

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' });
}
});
};

当我在 getPost 方法中调用 post.getAuthor() 时,他开始工作并通过 Id 找到了 User。但是 var author = post.getAuthor();undefined 值。

最佳答案

正如@zaynetro 提到的,您错误地调用了getAuthor 方法。这是一个异步方法,因此您应该接受一个回调参数,或者您可以返回一个 promise 。

但是您尝试做的事情已经内置于 mongoose 中,它称为查询填充。

http://mongoosejs.com/docs/populate.html

您可以配置一个 Post.author 引用属性,您可以让 Mongoose 为您解析到文档中。

var postSchema = Schema({
author: {
type: Schema.Types.ObjectId,
ref: 'User'
}
});
mongoose.model('Post', postSchema);

var userSchma = Schema({
name: String
});
mongoose.model('User', userSchema);

然后,在您的 route ,您的查询将如下所示:

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);
});

关于javascript - Nodejs 和 Mongoose 数据获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30685113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com