在node.js中调用异步函数

时间:2017-07-28 09:39:32

标签: javascript node.js asynchronous mongoose promise

我有一个异步功能

async function getPostAsync() {
  const post = await Post.findById('id');

  // if promise was successful,
  // but post with specific id doesn't exist
  if (!post) {
    throw new Error('Post was not found');
  }

  return post;
}

我用

调用函数
app.get('/', (req, res) => {
  getPostAsync().then(post => {
    res.json({
      status: 'success',
    });
  }).catch(err => {
    res.status(400).json({
      status: 'error',
      err
    });
  })
});

但我刚收到

{
  "status": "error",
  "err": {}
}

我希望得到错误Post was not found或连接错误或类似错误,但变量err只是我catch语句中的空对象。

1 个答案:

答案 0 :(得分:0)

请考虑以下事项:

let e = Error('foobar');
console.log( JSON.stringify(e) )

这会输出{},就像你的情况一样。这是因为错误不能很好地序列化为JSON。

相反,试试这个:

res.status(400).json({
  status : 'error',
  err    : err.message // `String(err)` would also work
});