gpt4 book ai didi

node.js - 捕获由 express.json() 中间件抛出的错误 json 格式错误

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:17 29 4
gpt4 key购买 nike

当 json 数据格式无效时,我收到 SyntaxError: Unexpected string in JSON at position 59 html 格式错误。我不知道为什么它给我的是 html 而不是错误对象。
我已将标题设置如下。


//header middlewares
app.use((req, res, next) => {
res.setHeader('Content-Type', 'application/json');
res.setHeader("Access-Control-Allow-Origin", "*");
next();
});

我想捕获错误并以下面的格式发送消息。

{ 
"status":404,
"message":Unexpected string in JSON at position 59
}

这是我得到的错误。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>SyntaxError: Unexpected string in JSON at position 59<br> &nbsp; &nbsp;at JSON.parse (&lt;anonymous&gt;)<br> &nbsp; &nbsp;at parse (C:\Users\mydirectory\auth\node_modules\body-parser\lib\types\json.js: 89: 19)<br> &nbsp; &nbsp;at C:\Users\mydirectory\auth\node_modules\body-parser\lib\read.js: 121: 18<br> &nbsp; &nbsp;at invokeCallback (C:\Users\mydirectory\auth\node_modules\raw-body\index.js: 224: 16)<br> &nbsp; &nbsp;at done (C:\Users\my-directory\auth\node_modules\raw-body\index.js: 213: 7)<br> &nbsp; &nbsp;at IncomingMessage.onEnd (C:\Users\mydirectory\auth\node_modules\raw-body\index.js: 273: 7)<br> &nbsp; &nbsp;at IncomingMessage.emit (events.js: 203: 15)<br> &nbsp; &nbsp;at endReadableNT (_stream_readable.js: 1145: 12)<br> &nbsp; &nbsp;at process._tickCallback (internal/process/next_tick.js: 63: 19)</pre>
</body>
</html>


我 try catch 此错误。

app.use((err, req, res, next) => {
if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
console.error(err);
return res.status(400).send(err); // Bad request
}
next();
});


但是我现在得到的响应如下。

{
"expose": true,
"statusCode": 400,
"status": 400,
"body": "{\n\t\"username\":\n}",
"type": "entity.parse.failed"
}

最佳答案

我在 expressjs github repo 上发布了这个问题,我得到了一个不错且合理的解决方案。

If you want that specific response, that is what you need to send in your error handler instead of the err object itself.

 app.use((err, req, res, next) => {
if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
console.error(err);
return res.status(400).send({ status: 404, message: err.message }); // Bad request
}
next();
});

现在我可以发送所需的响应了。

{
"status": 404,
"message": "Unexpected string in JSON at position 37"
}

Link to issue

关于node.js - 捕获由 express.json() 中间件抛出的错误 json 格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58134287/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com