Him*_*edi 7 mongodb node.js express
getUser: function(req, res){
Model.getUser({}, function(error, models){
if(error){
let response = {
code: 'ERR0001',
msg: 'Facing issues while ....',
err: error
}
res.json(response);
} else {
res.json(models)
}
}
};
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于所有积极的场景。但是对于错误情况,我没有收到完整的错误消息,而是显示“错误:{}”。
我已经用 Express 应用程序对象注册了 JSON 解析器。如果错误是我在 POSTMAN 控制台中得到的响应
{
code: 'ERR0001',
msg: 'Facing issues while ....',
err: {}
}
Run Code Online (Sandbox Code Playgroud)
根据我的要求,它应该显示如下内容:
{
code: 'ERR0001',
msg: 'Facing issues while ....',
err: 'ERROR: whatever exception occurred on database operation...'
}
Run Code Online (Sandbox Code Playgroud)
请帮助我了解此问题的原因。
当您使用 .Express 时,Express 会将您的 JSON 响应字符串化res.json()。
但是,由于该Error对象没有按照JSON.stringify()您的预期进行处理,因此您看不到它的内容;例如堆栈跟踪属性。
JSON.stringify()有关对象发生的情况的详细信息Error,请查看另一个堆栈溢出答案(我不会在此处重复):
Error因此,使用该答案的变体,当我想从 Express 向客户端发送回 Javascript 对象时,我会这样做:
function replaceErrors(key, value) {
if (value instanceof Error) {
var error = {};
Object.getOwnPropertyNames(value).forEach(function (key) {
error[key] = value[key];
});
return error;
}
return value;
}
function getPureError(error) {
return JSON.parse(JSON.stringify(error, replaceErrors));
}
Run Code Online (Sandbox Code Playgroud)
然后在我的回复中调用它,如下所示:
res.status(500).json(getPureError(error));
Run Code Online (Sandbox Code Playgroud)
对 的调用会对对象getPureError()进行字符串化Error并获取所有属性,因为对replaceErrors(). 然后它将其解析回纯对象。当调用时,这个纯对象与 Express 配合得很好.json(),因此您可以获得您期望的所有属性。这有点浪费,但你得到了你想要的结果。
这导致我看到了完整的Error物体;堆栈跟踪和所有。
当我第一次遇到这个问题时,我是这样做的:
res.status(500).json(error);
Run Code Online (Sandbox Code Playgroud)
我正在{}服务器上回复我的回复。我花了一些时间才弄清楚那里发生了什么。我最初以为我没有json()错误地链接该命令,但事实确实如此。实际的问题是该Error对象的行为与JSON.stringify()上述其他对象不同。
我希望这对您或至少对其他人有帮助!
| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |