Dalam Node.js/Express.js, objek respons (res) membenarkan untuk kaedah tertentu dipanggil hanya pada peringkat tertentu mengendalikan permintaan. Satu peringkat sedemikian ialah peringkat "Kepala", di mana pengepala boleh ditetapkan menggunakan kaedah seperti res.setHeader(). Walau bagaimanapun, sebaik sahaja peringkat "Body" dimasukkan, pengepala tidak lagi boleh ditetapkan.
Ralat yang anda hadapi ("Ralat: Tidak boleh tetapkan pengepala selepas ia dihantar kepada klien") mencadangkan bahawa anda cuba menetapkan pengepala selepas respons telah memasuki peringkat "Badan". Untuk menyelesaikan isu ini, anda perlu memastikan bahawa pengepala ditetapkan semasa peringkat "Kepala" sebelum sebarang data ditulis kepada respons.
Dalam kes khusus anda, ralat sedang dilemparkan kerana anda memanggil res. redirect() dalam fungsi middleware pengesahan anda. Ini menyebabkan respons dihantar, mengalihkannya ke peringkat "Badan". Akibatnya, apabila ralat dilemparkan dan Ekspres cuba menghantar halaman ralat, ia gagal kerana pengepala tidak lagi boleh ditetapkan.
Untuk menyelesaikan isu ini, anda boleh menggunakan fungsi next() dalam perisian tengah anda untuk lulus kawalan ke perisian tengah seterusnya dalam rantaian atau ke penghala Ekspres. Ini akan membolehkan ralat dikendalikan dengan betul dan respons yang sesuai dihantar.
app.get('/auth/facebook', function(req, res, next) { req.authenticate("facebook", function(error, authenticated) { if (authenticated) { res.redirect("/great"); console.log("ok cool."); console.log(res['req']['session']); } else { next(error); // Pass the error to the error-handling middleware } }); });
Dengan menghantar ralat kepada pengendalian ralat middleware, anda boleh memastikan bahawa respons ralat yang sesuai dihantar tanpa menghadapi ralat "Tidak dapat menetapkan pengepala selepas ia dihantar".
Atas ialah kandungan terperinci Mengapakah saya mendapat ralat 'Tidak dapat menetapkan pengepala selepas ia dihantar kepada klien' dalam Node.js/Express.js, dan bagaimanakah saya boleh membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!