Rumah >hujung hadapan web >tutorial js >Mengapa Saya Mendapat Ralat 'Tidak dapat menetapkan pengepala selepas ia dihantar' dalam Node.js/Express?

Mengapa Saya Mendapat Ralat 'Tidak dapat menetapkan pengepala selepas ia dihantar' dalam Node.js/Express?

DDD
DDDasal
2024-12-29 19:40:11557semak imbas

Why Do I Get a

Ralat: "Tidak dapat menetapkan pengepala selepas ia dihantar" dalam Node.js/Express

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn