在nodeJs中向客户端发送错误时出错

时间:2016-10-06 06:27:53

标签: javascript angularjs node.js

我在nodeJS中使用async,在我的最终回调中,我处理错误并尝试将其发送回角度控制器。

 function (err, data) {
        if (err) {
            console.log(err);
            res.status(500).send({ err : err});
        }
        else {
            res.json({data: data});
        }
    });

现在控制台中的错误是。

[Error: Username is already in use]

我无法在角度控制器中得到这个特殊错误我尝试在所有组合中发送错误,例如。

   res.status(500).send({ err : err[0]});
      res.status(500).send({ err : err.Error});

这就是我在前端所得到的。

   Object {data: Object, status: 500, config: Object, statusText: "Internal Server Error"}
config
:
Object
data
:
Object
err
:
Object
__proto__
:
Object
__proto__
:
Object
headers
:
(d)
status
:
500
statusText
:
"Internal Server Error"

如何将使用中的用户名错误带到我的前端。

1 个答案:

答案 0 :(得分:2)

500错误通常保留用于服务器错误,而不是像您所描述的那样。服务器错误应该由您的服务器处理,并优雅地呈现给您的前端。客户端错误应该在400s内。为什么不尝试409400

res.status(409).json({error: "Username already exists");

请查看HTTP Status codes了解更多信息:

  

409冲突   由于与资源的当前状态冲突,无法完成请求。此代码仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许。响应主体应该包含足够的信息供用户识别冲突的来源。理想情况下,响应实体将包含足够的信息供用户或用户代理解决问题;但是,这可能是不可能的,也不是必需的。

     

最有可能发生冲突以响应PUT请求。例如,如果正在使用版本控制并且包含PUT的实体更改为与早期(第三方)请求所产生的资源冲突的资源,则服务器可能会使用409响应来指示它无法完成请求。在这种情况下,响应实体可能包含由响应Content-Type定义的格式的两个版本之间的差异列表。

注意:另外,作为一种良好做法,请确保返回您的res.函数,以获得可预测的控制流,如下所示:

return res.status(409).json({error: "Username already exists");