Express / node.js 204 HTTP代码响应问题

时间:2015-09-25 18:06:23

标签: node.js express

这是我的代码:

.put(function(req, res) {
  User.findById(req.params.user_id, function(err, user) {
    if(err) return res.send(err);

    user.dateEdited = new Date();
    user.save(function(err) {
      if(err) return res.send(err);

      return res.status(204).json(customHTTPcodeReponses.updated(user))
    });
  });
});      

我的部分中间件称为customHTTPcodeReponses

updated: function(data) {
  return {
    code: 204,
    status: 'Success',
    message: 'Resource updated (or soft deleted)',
    data: data
  };
}

我想通了,204不应该返回任何数据,所以我没有得到任何回复。 但是我希望有这些数据来看看真正改变了什么。那我怎么能处理响应代码?

请记住,如果我使用

res.status(200).json(customHTTPcodeReponses.updated(user))

显示数据。

如果您需要一些额外的解释,请询问。

3 个答案:

答案 0 :(得分:4)

是的,你是对的。此http状态不允许消息,因为它表示"没有内容"。如果您发送内容,请使用其他状态。有关详细信息,请查看文档:{​​{3}}。 有部分:" 204响应绝不能包含消息体,因此总是在标题字段后面的第一个空行终止。"

如果你想发送的不是内容,而是发送含有成瘾信息的元数据,在本文档中有部分:"响应可能包含实体标题形式的新的或更新的元信息,如果存在,应该与...相关联要求的变体。"。我认为这是你问题的正式答案。

如果你不那么正式,请使用状态' 200'将元数据作为内容。

编辑: 在标题中发送数据:

res.header(field, [value])

答案 1 :(得分:1)

很简单。如果您需要一些数据,只需使用返回码200并返回该数据。如果您不需要发回任何数据,请使用204.您可以设置标题为204以指示操作状态或URL设置为位置,返回码为201,但我不确定这是一个好主意。

答案 2 :(得分:0)

是,如果您必须使用200发送响应消息,或者也可以使用404 由于204,在正文中不返回任何消息