为Express应用中的错误选择HTML状态代码

时间:2016-11-30 08:33:30

标签: javascript node.js api error-handling

在我的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还是应该是别的?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

TL; DR A 500状态是最接近'一个尺寸适合所有'错误,但您可以深入了解详情。

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

  

5xx服务器错误

     

500内部服务器错误

     

501未实施

     

502 Bad Gateway

     

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等...