2015-09-25 28 views
1

这里是我的代码:快递/ Node.js的204 HTTP代码响应发行

.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)) 

显示数据。

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

回答

2

是的,你是对的。此http状态不允许消息,因为它表示“无内容”。如果您发送内容,请使用其他状态。详情请看文件:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html。 还有一部分:“204响应不能包含消息体,因此始终由头字段后面的第一个空行终止。”

如果你想发送的不是内容,而是带有上瘾信息的元数据,在本文中有一部分内容:“响应可以包含新的或更新的实体头信息,如果存在的话应该与请求变种。“我认为这是你的问题的正式答案。

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

编辑: 在标头中发送的数据:

res.header(field, [value]) 
1

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