我已经设置了一个简单的express rest api,我想从我的rest服务器(“ / api / posts”)请求某条路线时获取所有帖子
我尝试console.log(posts)
,它向我显示了帖子,但是当我尝试转到路线http://localhost:5000/api/posts时,尽管console.logging显示了帖子,但它却向我显示了一个空白页,这是为什么
function getAllPosts() {
Post.find((err, posts) => {
if (err) {
console.error(err);
}
console.log(posts);
console.log("all posts requested");
return posts;
});
}
router
.route("/")
.get((req, res) => {
let posts = getAllPosts();
res.send(posts);
})
我希望在访问http://localhost:5000/api/posts时会收到json帖子
答案 0 :(得分:0)
这与您在此处具有的代码的异步性质有关。 res.send
正在执行,Post.find()
才能解决。您只想在数据库查询完成数据提取后res.send(posts)
(如您在示例中那样)(如果使用回调),则可以在回调内部进行。你可以做这样的事情。
router
.route("/")
.get((req, res) => {
Post.find({}, (err, posts) => {
if (err) {
return res.status(500).send(err)
}
res.send(posts)
})
})
答案 1 :(得分:0)
当您从getAllpost函数返回值时,由于异步,路由将获得未定义的值。尝试像这样编辑代码:
function getAllPosts(req, res) {
Post.find((err, posts) => {
if (err) {
console.error(err);
}
console.log(posts);
console.log("all posts requested");
res.send( { data: posts} );
});
}
router
.route("/").get((req, res) => {
getAllPosts(req, res);
});