【问题标题】:Choosing a HTML status code for errors in Express apps为 Express 应用程序中的错误选择 HTML 状态代码
【发布时间】:2017-04-14 11:52:48
【问题描述】:

在我的 API 中,如果任何查询失败,那么响应状态码应该是什么?

例子:

Grade.find({},function(err,grades) {
    if (err)
      res.status(500).json({error:err,message: 'Somthing went wrong please try again later'});

    else 
     res.status(200).json({grades:grades});         
});

500 OK 还是应该是别的?

【问题讨论】:

  • 500 没问题,但这取决于。例如,由于提供的查询可能会发生错误,那么在这种情况下,它是 400 错误请求错误,但如果您的数据库意外关闭,则此错误更可能是 500 错误。顺便说一句,我创建了node module 用于处理模块之间的错误,然后将它们解析为 HTTP 错误代码。看看它可能有用。

标签: javascript node.js api error-handling


【解决方案1】:

TL;DR 500 状态是最接近“一刀切”错误的情况,但您可以了解更深入的细节。

根据the standards,你有很多选择:

5xx 服务器错误

500 内部服务器错误

501 未实现

502 网关错误

503 服务不可用

504 网关超时

510 未扩展

您还可以创建自己的 5xx 状态来区分错误类型,只需尝试使用未为其他任何内容定义的数字。

或坚持 500 状态并将原始错误代码附加到您的结果中:

res.status(500).json({error:err, code : err.code, message: 'Somthing went wrong please try again later'});

但是,在回答 5xx 之前,您需要通过验证收到的数据来确保错误不是来自客户端。如果接收到的数据无效,请使用 400 Bad Request 代码。如果问题与安全相关,请使用 403 Not Authorized 等...

【讨论】:

    【解决方案2】:

    根据http status codes,您可以使用5xx 处理服务器错误,使用4xx 处理客户端错误。

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-26
      • 2015-04-18
      • 2015-08-29
      • 1970-01-01
      相关资源
      最近更新 更多