更改状态代码会更改Express

时间:2016-08-01 15:44:04

标签: node.js express

所以我有一个非常简单的辅助函数来在我的响应中发送错误。我在我的代码库中使用了这个函数:

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"
}

我的原始回复正文(包含successerrorMsgerrors字段的回复正文)位于data属性下的新回复中。我不知道为什么会这样,但据我所知,我的应用程序中没有任何其他自定义错误处理程序。我不想要这种行为,而只想要我原来的回复体。

我使用的是body-parser软件包,但我认为它只会影响请求,而不会影响响应。

2 个答案:

答案 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错误处理程序返回了错误本身。