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

be-*_*ied 2 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))
    });
  });
});      
Run Code Online (Sandbox Code Playgroud)

我的中间件的一部分称为 customHTTPcodeReponses

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

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

请记住,如果我使用

res.status(200).json(customHTTPcodeReponses.updated(user))
Run Code Online (Sandbox Code Playgroud)

数据显示。

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

Krz*_*pka 5

是的,你是对的。此 http 状态不允许消息,因为它意味着“无内容”。如果您发送内容,请使用其他状态。有关详细信息,请参阅文档:http : //www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。有部分内容:“204 响应不得包含消息正文,因此始终以头字段后的第一个空行终止。”

如果您想发送的不是内容而是带有成瘾信息的元数据,在本文档中有一部分:“响应可以包含实体头形式的新的或更新的元信息,如果存在,应该与请求的变体相关联。”。我认为这是对您问题的正式回答。

如果您不那么正式,请使用状态“200”和元数据作为内容。

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

res.header(field, [value])
Run Code Online (Sandbox Code Playgroud)