* .find()包装在函数中时,猫鼬不返回帖子

时间:2019-05-11 20:12:26

标签: node.js express mongoose

我已经设置了一个简单的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帖子

2 个答案:

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

  });