Ralat ini berlaku apabila cuba menetapkan pengepala selepas respons sudah telah dihantar kepada pelanggan. Dalam Node.js dan Express, terdapat peraturan tertentu mengenai susunan kaedah respons boleh dipanggil:
Keadaan Kepala: Sebelum res.writeHead() dipanggil, hanya res.setHeader () dan fungsi serupa boleh digunakan untuk menetapkan pengepala.
Keadaan Badan: Selepas res.writeHead() dipanggil, pengepala tidak boleh diubah suai lagi. Hanya res.write() dan res.end() boleh digunakan untuk menulis data ke badan respons.
Dalam kod yang disediakan, ralat berlaku kerana ubah hala cuba selepas pengepala respons telah dihantar oleh res.writeHead(). Khususnya, kod berikut menyebabkan isu:
res.redirect("/great");
Untuk membetulkannya, ubah hala mesti dilakukan sebelum res.writeHead() dipanggil. Begini cara kod boleh diubah suai:
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']); } }); });
Dengan membuat perubahan ini, ubah hala akan dicuba sebelum pengepala respons dihantar, menghalang ralat daripada berlaku.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat 'Tidak dapat menetapkan pengepala selepas ia dihantar' dalam Node.js/Express?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!