创建在Express请求中返回的错误消息的正确方法是什么?

6 javascript error-handling node.js express

我有一个调用的函数a接受一个回调,如果有一个错误,则调用该错误.

a在Express路径请求中调用.如果出现错误,则错误应该是请求的响应.

function a(cb) {
  cb(new Error('Some error message'))
}

app.get('/', function (req, res) {
  a(function (error) {
    if (error) {
      res.json(error, 400)
    }
    res.send('No error')
  })
})
Run Code Online (Sandbox Code Playgroud)

我已经查看了Express的代码,看起来res.json会将我的字符串化error.但是,结果是一个空字符串:

> var e = new Error('Some error message')
undefined
> JSON.stringify(e)
'{}'
> e.message
'Some error message'
Run Code Online (Sandbox Code Playgroud)

有一些方法可以让我的路由返回错误信息,例如toString在我的路线中转换错误对象.但是,我想知道在Node API中格式化错误消息的最佳做法是什么,以及这是否会改变这里的内容.我应该以不同方式格式化错误消息,还是应该只处理Error路径中的对象,例如:

res.json({ error: error.message }, 400)
Run Code Online (Sandbox Code Playgroud)

And*_*ren 5

要添加到@ steveukx的答案,您可以.use通过一个arity为4的函数在express中指定错误处理程序.

app.use(function(err, req, res, next){
  res.json(500, {
    error: err.message
  });
});
Run Code Online (Sandbox Code Playgroud)

每当你这样做时都会被调用next(err).查看文档.


ste*_*ukx 1

快速路由可以使用第三个参数next,该参数可用于通过调用跳过当前路由next(),或通过调用传递错误next(err)

尝试使用:

app.get('/', function (req, res, next) {
  a(function (error) {
    if (error) {
      next(error);
    }
    else {
      res.send('No error')
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请查看http://expressjs.com/api.html#app.param