Gab*_*mas 39 javascript node.js express
我想在发送json对象时从bodyParser()中间件中捕获错误,但它无效,因为我想发送自定义响应而不是通用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 ();
}
});
Run Code Online (Sandbox Code Playgroud)
但在我看来这是一个非常难看的方法,因为我正在比较可能在未来的快速版本中更改的错误消息.有没有其他方法来捕获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
}
Run Code Online (Sandbox Code Playgroud)
漂亮的印刷堆栈:
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)
Run Code Online (Sandbox Code Playgroud)
rob*_*lep 22
我认为你最好的选择是检查SyntaxError:
app.use(function (error, req, res, next) {
if (error instanceof SyntaxError) {
sendError(res, myCustomErrorMessage);
} else {
next();
}
});
Run Code Online (Sandbox Code Playgroud)
Dan*_*rez 14
从@alexander的答案,但用一个例子
app.use((req, res, next) => {
bodyParser.json({
verify: addRawBody,
})(req, res, (err) => {
if (err) {
console.log(err);
res.sendStatus(400);
return;
}
next();
});
});
function addRawBody(req, res, buf, encoding) {
req.rawBody = buf.toString();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我所做的只是:
app.use(bodyParser.json({ limit: '10mb' }))
// body parser error catcher
app.use((err, req, res, next) => {
if (err) {
res.status(400).send('error parsing data')
} else {
next()
}
})
Run Code Online (Sandbox Code Playgroud)
好的,找到它:
bodyParser()是json(),urlencoded()和multipart()的便捷函数。我只需要调用json(),捕获错误并调用urlencoded()和multipart()。
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 ());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21835 次 |
| 最近记录: |