Javascript 向nodeJs中的客户端发送错误时出错
我在nodeJS中使用async,在最后一次回调中,我处理错误并试图将其发送回我的角度控制器Javascript 向nodeJs中的客户端发送错误时出错,javascript,angularjs,node.js,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}); } }); 现在
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"
如何将用户名使用中的错误带到前端。
500
错误通常是为服务器错误保留的,而不是为您描述的场景保留的。服务器错误应该由服务器处理,并优雅地呈现在前端。客户端错误应该在400秒内出现。你为什么不试试409
或400
:
res.status(409).json({error: "Username already exists");
有关更多信息,请参阅:
409冲突
由于与资源的当前状态冲突,无法完成请求。只有在预期用户可能能够解决冲突并重新提交请求的情况下,才允许使用此代码。响应主体应包含足够的信息,以便用户识别冲突的来源。理想情况下,响应实体将包括足够的信息,供用户或用户代理修复问题;然而,这可能是不可能的,也不是必须的
在响应PUT请求时最有可能发生冲突。例如,如果正在使用版本控制,并且正在放置的实体包含对资源的更改,这些更改与先前(第三方)请求所做的更改相冲突,则服务器可能会使用409响应来指示它无法完成请求。在这种情况下,响应实体可能会以响应内容类型定义的格式包含两个版本之间差异的列表
注意:另外,作为一种良好的做法,请确保返回res.
函数,以实现可预测的控制流,如下所示:
return res.status(409).json({error: "Username already exists");
你的函数做什么?res.status(500).send({err:err});,在这里,我试图发送错误,其中错误为[Error:Username已在使用],但它不会进入前端。为什么不返回ok状态,错误为500是服务器错误而不是数据验证错误,但我希望[Error:Username已在使用]向用户显示
{data:Object
在前端?无论如何,谢谢,我将这个回调(新错误(messages.phonenumberInUse))更改为回调(messages.phonenumberInUse);现在我可以在我的浏览器中看到它的406状态。@sacDahal从纯RESTful的角度来看,我认为你应该使用409
或400
。这是吹毛求疵,但REST太棒了:)我也更新了答案