2015-09-25 87 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,但我不確定這是個好主意。