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
Lepaskan: 2024-12-29 19:40:11
asal
542 orang telah melayarinya

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");
Salin selepas log masuk

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']);
    }
  });
});
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan