所以我有一个非常简单的辅助函数来在我的响应中发送错误。我在我的代码库中使用了这个函数:
exports.error = function (err, res) {
res.send({
success: false,
errorMsg: err.message,
errors: err.errors == null ? [] : err.errors
});
};
我决定为其添加状态代码:
exports.error = function (err, res, status) {
res.status(status).send({
success: false,
errorMsg: err.message,
errors: err.errors == null ? [] : err.errors
});
};
如果状态为200,我的身体就像传递给send
方法的对象一样。问题是,如果status
与200(例如400或500)不同,我的响应主体将更改为:
{
config: Object
data: Object
headers: function (d)
status: 500
statusText: "Internal Server Error"
}
我的原始回复正文(包含success
,errorMsg
和errors
字段的回复正文)位于data
属性下的新回复中。我不知道为什么会这样,但据我所知,我的应用程序中没有任何其他自定义错误处理程序。我不想要这种行为,而只想要我原来的回复体。
我使用的是body-parser
软件包,但我认为它只会影响请求,而不会影响响应。
答案 0 :(得分:2)
您获得的响应对象是Angular的响应对象(请参阅the documentation):
响应对象具有以下属性:
数据 -
{string|Object}
- 使用转换函数转换的响应正文 状态 -{number}
- 响应的HTTP状态代码 标题 -{function([headerName])}
- 标题获取功能。
config -{Object}
- 用于生成请求的配置对象 statusText -{string}
- 响应的HTTP状态文本。
AFAIK,当Angular收到成功的HTTP响应(如200)时,它将运行任何default transformations来将响应转换为JS对象(来自JSON响应)。
然而,当HTTP响应指示错误时,它不会这样做。在这种情况下,您将获得上述响应对象。
答案 1 :(得分:0)
感谢@robertklep我发现问题实际上是在我的Angular代码中处理错误。我没有返回响应主体,而是我的Angular错误处理程序返回了错误本身。