【问题标题】:express return erros as JSON instead HTML将返回错误表示为 JSON 而不是 HTML
【发布时间】:2019-12-09 01:43:20
【问题描述】:

我正在使用 ExpressJS 开发简单的 api,当 express 中生成错误时(我无法控制,例如:express-jwt 中间件或某些 404 错误等),它会返回一个 html 响应。 尝试在邮递员中更改请求标头,但相同。我尝试了body-parser 并在中间件中设置了content-type 标头。

但我使用res.send() 发送的所有回复都正常工作。

这是我遇到的 404 错误。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">>Error</title>
    </head><body><pre>Cannot GET /test</pre></body>
</html>

有没有办法为应用程序全局设置响应类型?还是因为我在邮递员中做错了什么?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    使用可以在添加所有路由后添加错误处理程序。

    app.use(function(err, req, res, next) {
      console.error(err.message); // Log error message in our server's console
      if (!err.statusCode) err.statusCode = 500; // If err has no specified error code, set error code to 'Internal Server Error (500)'
      res.status(err.statusCode).send({error : err.message}); // All HTTP requests must have a response, so let's send back an error with its status
    

    【讨论】:

    • 这非常有效。建议将上述代码与http-errors [npmjs.com/package/http-errors] 一起使用。
    • @JuanIgnacioBarisich 在理想情况下,出于安全原因,不应在响应中公开服务器错误消息和堆栈跟踪。如果出于开发目的,您想发送堆栈作为响应,err.stack 将包含堆栈。用于生产。日志可以链接到响应发送的哈希值,以便轻松搜索日志
    • @ShreyGupta 我一直在谈论服务器日志,而不是 http 响应。
    • @JuanIgnacioBarisich 对于 404 错误,您需要一条捕获所有路由 app.use((req, res)=&gt;{})
    猜你喜欢
    • 2018-10-29
    • 2018-03-03
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2012-09-24
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多