赶上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 }