在回應已經完成後嘗試設定標頭時會發生此錯誤已發送給客戶。在Node.js 和Express 中,關於回應方法的呼叫順序有一定的規則:
Head State: 在呼叫res.writeHead() 之前,只有res.setHeader () 和類似的函數可以用來設定headers。
Body State: 在 res.writeHead() 之後呼叫後,無法再修改標頭。只有 res.write() 和 res.end() 可以用於將資料寫入回應正文。
在提供的程式碼中,發生錯誤是因為在發送回應標頭後嘗試重定向通過 res.writeHead()。具體來說,以下程式碼會導致問題:
res.redirect("/great");
要解決此問題,必須在呼叫 res.writeHead() 之前完成重新導向。以下是修改程式碼的方法:
app.get('/auth/facebook', function(req, res) { req.authenticate("facebook", function(error, authenticated) { if (authenticated) { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.redirect("/great"); console.log("ok cool."); console.log(res['req']['session']); } }); });
透過進行此更改,將在發送回應標頭之前嘗試重定向,從而防止錯誤。
以上是為什麼我在 Node.js/Express 中收到'發送後無法設定標頭”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!