什么是正确的方式来创build快速请求返回的错误消息?

我有一个函数称为a接受callback,如果有错误,会调用一个错误。

a在快速路由请求中被调用。 如果有错误,错误应该是请求的响应。

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

我已经查看了Express的代码,看来res.json会将我的error res.json 。 但是,这个结果是一个空string:

 > var e = new Error('Some error message') undefined > JSON.stringify(e) '{}' > e.message 'Some error message' 

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

 res.json({ error: error.message }, 400) 

Express路由可以使用next的第三个参数,通过调用next()来跳过当前路由,或者通过调用next(err)来传递错误。

尝试使用:

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

有关更多信息,请查看http://expressjs.com/api.html#app.param

要添加@ steveukx的答案,你可以用express来指定一个error handling程序,方法是.use一个arity为4的函数。

 app.use(function(err, req, res, next){ res.json(500, { error: err.message }); }); 

next(err)会被调用。 看文档 。

我现在不是什么你的反应看起来像什么时候没有发生错误,但这是我通常如何处理JSON响应:

 function (err, data) { if (err) { res.json({ success: false, error: err.message }, 400); } else { res.json({ success: true, data: data }); } } 

试着把这个包装在一个额外的中间件/function中。 保持类似于标准节点样式的function的签名。 (第一个参数错误,跟随实际数据的参数。)这样,客户端很容易处理你的响应,因为你所要做的就是查看success域。