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

我在nodeJS中使用asynchronous,在我最后的callback中,我正在处理错误,并尝试将其发送回我的angular度控制器。

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] 

我无法得到这个特定的错误在我的angular度控制器我试图发送错误的所有组合,如。

  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" 

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

通常为服务器错误保留500错误,而不是像您所描述的那样。 服务器错误应该由您的服务器处理,并且优雅地呈现给您的前端。 客户的错误应该在四十几岁。 你为什么不试试409400

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

查看更多的HTTP状态代码 :

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

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

注:另外,作为一个良好的做法,确保您返回您的res. function,为可预测的控制stream量,如下所示:

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