Express 默认以 HTML 页面形式返回错误。在开发 REST api 时,我希望所有错误都采用 JSON 格式。我如何为此配置快递?
我希望响应看起来像这样
{
"statusCode": 404,
"error": "Not Found"
}
Run Code Online (Sandbox Code Playgroud)
但我得到了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot DELETE /object/</pre>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是我的基本应用
export const app = express();
app.use(express.json());
app.get("/objects", listObjects);
app.get("/object/:id", getObject);
app.post("/object", createObject);
app.put("/object/:id", updateObject);
app.delete("/object/:id", deleteObject);
Run Code Online (Sandbox Code Playgroud)
更新:澄清一下,这不是我想作为 json 处理的处理程序的错误。这样做非常简单。
我所追求的是让 express 停止为未注册的处理程序返回 html 错误,例如在 /assessments 上执行 DELETE,或在 /anUnknownRoute 上执行 GET
Rob*_*per 12
您向中间件堆栈添加自定义错误处理中间件 - 这是常规中间件,但有 4 个参数而不是 3 个参数。在此错误处理程序中,您用于res.status(code).send(jsonResponse)发送 json 错误。
一个总是发送状态 500 JSON 错误的简单示例:
const bodyParser = require('body-parser')
const express = require('express')
const jsonErrorHandler = async (err, req, res, next) => {
res.status(500).send({ error: err });
}
const app = express()
// The other middleware
app.use(bodyParser.json())
// Your handler
app.use(jsonErrorHandler)
Run Code Online (Sandbox Code Playgroud)
Art*_*tem 10
您可以简单地添加'Content-Type: application/json'到您的响应标头中,并以 JSON 格式编写您想要的任何内容,例如
function(err, req, res, next){
res.setHeader('Content-Type', 'application/json');
res.status(500);
res.send(JSON.stringify(error));
});
Run Code Online (Sandbox Code Playgroud)
或者你可以用res.json。请参阅官方文档了解更多详细信息:https : //expressjs.com/en/api.html#res.json
如果您想默认返回 JSON 中的错误,那么您可能对使用默认的快速错误处理机制感兴趣:https : //expressjs.com/en/guide/error-handling.html
只需将 an 传递error给next回调即可直接进入错误处理程序(跳过队列中的其他所有内容)并将错误处理中间件添加到中间件队列的末尾。这应该可以解决问题。
PS来自 express.js 常见问题解答:
在 Express 中,404 响应不是错误的结果,因此错误处理程序中间件不会捕获它们。这种行为是因为 404 响应只是表明没有额外的工作要做;也就是说,Express 执行了所有的中间件函数和路由,发现都没有响应。您需要做的就是在堆栈的最底部(在所有其他函数下方)添加一个中间件函数来处理 404 响应:
app.use(function (req, res, next) {
res.status(404).send("Sorry can't find that!")
})
Run Code Online (Sandbox Code Playgroud)
显然,您可以发送 JSON 格式的响应...
| 归档时间: |
|
| 查看次数: |
9624 次 |
| 最近记录: |