赶上expressParser错误

我想从bodyParser()中间件发送错误,当我发送一个JSON对象,它是无效的,因为我想发送一个自定义的响应,而不是一个通用的400错误。

这是我有,它的工作原理:

app.use (express.bodyParser ()); app.use (function (error, req, res, next){ //Catch bodyParser error if (error.message === "invalid json"){ sendError (res, myCustomErrorMessage); }else{ next (); } }); 

但是这在我看来是一个非常丑陋的方法,因为我正在比较可能在将来的快速版本中改变的错误消息。 还有其他方法可以捕获bodyParser()错误?

编辑:

这是请求主体有一个无效的json时的错误:

 { stack: 'Error: invalid json\n at Object.exports.error (<path>/node_modules/express/node_modules/connect/lib/utils.js:55:13)\n at IncomingMessage.<anonymous> (<path>/node_modules/express/node_modules/connect/lib/middleware/json.js:74:71)\n at IncomingMessage.EventEmitter.emit (events.js:92:17)\n at _stream_readable.js:872:14\n at process._tickDomainCallback (node.js:459:13)', arguments: undefined, type: undefined, message: 'invalid json', status: 400 } 

漂亮的印刷堆栈:

 Error: invalid json at Object.exports.error (<path>/node_modules/express/node_modules/connect/lib/utils.js:55:13) at IncomingMessage.<anonymous> (<path>/node_modules/express/node_modules/connect/lib/middleware/json.js:74:71) at IncomingMessage.EventEmitter.emit (events.js:92:17) at _stream_readable.js:872:14 at process._tickDomainCallback (node.js:459:13) 

我认为你最好的select是检查SyntaxError

 app.use(function (error, req, res, next) { if (error instanceof SyntaxError) { sendError(res, myCustomErrorMessage); } else { next(); } }); 

好的,find它了:

bodyParser()是json(),urlencoded()和multipart()的便捷函数。 我只需要调用json(),捕获错误并调用urlencoded()和multipart()。

bodyParser来源

 app.use (express.json ()); app.use (function (error, req, res, next){ //Catch json error sendError (res, myCustomErrorMessage); }); app.use (express.urlencoded ()); app.use (express.multipart ()); 

我发现检查SyntaxError是不够的,所以我做:

 if (err instanceof SyntaxError && err.status >= 400 && err.status < 500 && err.message.indexOf('JSON')) { // process filtered exception here }