Saya cukup baru di Node.js dan saya mengalami beberapa masalah.
Saya menggunakan Node.js 4.10 dan Express 2.4.3.
Ketika saya mencoba mengakses http://127.0.0.1:8888/auth/facebook , saya akan dialihkan ke http://127.0.0.1:8888/auth/facebook_callback .
Saya kemudian menerima kesalahan berikut:
Error: Can't render headers after they are sent to the client.
at ServerResponse.<anonymous> (http.js:573:11)
at ServerResponse._renderHeaders (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/patch.js:64:25)
at ServerResponse.writeHead (http.js:813:20)
at /home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/auth.strategies/facebook.js:28:15
at /home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/index.js:113:13
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/strategyExecutor.js:45:39)
at [object Object].pass (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/authExecutionScope.js:32:3)
at [object Object].halt (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/authExecutionScope.js:29:8)
at [object Object].redirect (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/authExecutionScope.js:16:8)
at [object Object].<anonymous> (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/auth.strategies/facebook.js:77:15)
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:527:11)
at ServerResponse.setHeader (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/patch.js:50:20)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:162:13)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:195:11)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:150:23)
at param (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/router.js:189:13)
at pass (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/router.js:191:10)
at Object.router [as handle] (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/router.js:197:6)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:198:15)
at Object.auth [as handle] (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/index.js:153:7)
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:527:11)
at ServerResponse.setHeader (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/patch.js:50:20)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:162:13)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:207:9)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:150:23)
at param (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/router.js:189:13)
at pass (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/router.js:191:10)
at Object.router [as handle] (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/router.js:197:6)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:198:15)
at Object.auth [as handle] (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/index.js:153:7)
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:527:11)
at ServerResponse.setHeader (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/patch.js:50:20)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:162:13)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:150:23)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:207:9)
at Object.auth [as handle] (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect-auth/lib/index.js:153:7)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:198:15)
at HTTPServer.handle (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:211:3)
at Object.handle (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:105:14)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:198:15)
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:527:11)
at ServerResponse.setHeader (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/patch.js:50:20)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:162:13)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:150:23)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:207:9)
at HTTPServer.handle (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:211:3)
at Object.handle (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:105:14)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:198:15)
at /home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/session.js:323:9
at /home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/session.js:338:9
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: Can't set headers after they are sent.
at ServerResponse.<anonymous> (http.js:527:11)
at ServerResponse.setHeader (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/patch.js:50:20)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:162:13)
at next (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/http.js:207:9)
at /home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/session.js:323:9
at /home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/session.js:338:9
at Array.<anonymous> (/home/eugene/public_html/all_things_node/projects/fb2/node_modules/connect/lib/middleware/session/memory.js:57:7)
at EventEmitter._tickCallback (node.js:126:26)
Berikut ini adalah kode saya:
var fbId= "XXX";
var fbSecret= "XXXXXX";
var fbCallbackAddress= "http://127.0.0.1:8888/auth/facebook_callback"
var cookieSecret = "node"; // enter a random hash for security
var express= require('express');
var auth = require('connect-auth')
var app = express.createServer();
app.configure(function(){
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({secret: cookieSecret}));
app.use(auth([
auth.Facebook({
appId : fbId,
appSecret: fbSecret,
callback: fbCallbackAddress,
scope: 'offline_access,email,user_about_me,user_activities,manage_pages,publish_stream',
failedUri: '/noauth'
})
]));
app.use(app.router);
});
app.get('/auth/facebook', function(req, res) {
req.authenticate("facebook", function(error, authenticated) {
if (authenticated) {
res.redirect("/great");
console.log("ok cool.");
console.log(res['req']['session']);
}
});
});
app.get('/noauth', function(req, res) {
console.log('Authentication Failed');
res.send('Authentication Failed');
});
app.get('/great', function( req, res) {
res.send('Supercoolstuff');
});
app.listen(8888);
Bolehkah saya tahu apa yang salah dengan kode saya?
javascript
node.js
express
DjangoRocks
sumber
sumber
Jawaban:
The
res
objek dalam Express adalah subclass dari Node.js inihttp.ServerResponse
( baca sumber http.js ). Anda diizinkan untuk meneleponres.setHeader(name, value)
sesering yang Anda inginkan sampai Anda meneleponres.writeHead(statusCode)
. Setelah ituwriteHead
, tajuk dipanggang dan Anda hanya bisa meneleponres.write(data)
, dan akhirnyares.end(data)
.Kesalahan "Kesalahan: Tidak dapat mengatur header setelah dikirim." berarti bahwa Anda sudah dalam status Tubuh atau Selesai, tetapi beberapa fungsi mencoba mengatur header atau statusCode. Ketika Anda melihat kesalahan ini, cobalah untuk mencari apa pun yang mencoba mengirim tajuk setelah beberapa badan telah ditulis. Misalnya, cari panggilan balik yang secara tidak sengaja dipanggil dua kali, atau kesalahan apa pun yang terjadi setelah tubuh dikirim.
Dalam kasus Anda, Anda menelepon
res.redirect()
, yang menyebabkan respons menjadi Selesai. Kemudian kode Anda melemparkan kesalahan (res.req
adalahnull
). dan karena kesalahan terjadi dalam aktual Andafunction(req, res, next)
(bukan dalam panggilan balik), Connect dapat menangkapnya dan kemudian mencoba mengirim 500 halaman kesalahan. Tetapi karena header sudah dikirim, Node.jssetHeader
melemparkan kesalahan yang Anda lihat.Daftar lengkap Node.js / Metode respons ekspres dan kapan harus dipanggil:
Respons harus ada di Kepala dan tetap di Kepala :
res.writeContinue()
res.statusCode = 404
res.setHeader(name, value)
res.getHeader(name)
res.removeHeader(name)
res.header(key[, val])
(Hanya ekspres)res.charset = 'utf-8'
(Hanya mengungkapkan; hanya memengaruhi metode khusus-Ekspres)res.contentType(type)
(Hanya ekspres)Respons harus ada di Kepala dan menjadi Tubuh :
res.writeHead(statusCode, [reasonPhrase], [headers])
Respons dapat di Kepala / Badan dan tetap di Tubuh :
res.write(chunk, encoding='utf8')
Respons dapat di Kepala / Badan dan menjadi Selesai :
res.end([data], [encoding])
Respons dapat berada di salah satu Kepala / Badan dan tetap dalam kondisi saat ini:
res.addTrailers(headers)
Respons harus ada di Kepala dan menjadi Selesai :
return next([err])
(Sambungkan / Ekspresikan saja)function(req, res, next)
(Hanya Hubungkan / Ekspres)res.send(body|status[, headers|status[, status]])
(Hanya ekspres)res.attachment(filename)
(Hanya ekspres)res.sendfile(path[, options[, callback]])
(Hanya ekspres)res.json(obj[, headers|status[, status]])
(Hanya ekspres)res.redirect(url[, status])
(Hanya ekspres)res.cookie(name, val[, options])
(Hanya ekspres)res.clearCookie(name[, options])
(Hanya ekspres)res.render(view[, options[, fn]])
(Hanya ekspres)res.partial(view[, options])
(Hanya ekspres)sumber
return
sebelumnyanext()
, terima kasih ini menunjukkan kesalahan saya!Saya mengalami kesalahan ini juga untuk sementara waktu. Saya pikir (harapan) saya melingkari kepala saya, ingin menulisnya di sini untuk referensi.
Ketika Anda menambahkan middleware ke menghubungkan atau mengekspresikan (yang dibangun di atas koneksi) menggunakan
app.use
metode ini, Anda menambahkan item keServer.prototype.stack
dalam terhubung (Setidaknya dengan saat ininpm install connect
, yang terlihat sangat berbeda dari satu github pada posting ini). Ketika server mendapat permintaan, server akan beralih ke stack, memanggil(request, response, next)
metode.Masalahnya adalah, jika di salah satu item middleware menulis ke badan respons atau tajuk (sepertinya itu / atau karena alasan tertentu), tetapi tidak menelepon
response.end()
dan meneleponnext()
saatServer.prototype.handle
metode inti selesai, ia akan melihat bahwa:response.headerSent
benar.Jadi, ada kesalahan. Tetapi kesalahan yang dilontarkannya hanyalah respons dasar ini (dari koneksi
http.js
kode sumber :Di sana, ia memanggil
res.setHeader('Content-Type', 'text/plain');
, yang kemungkinan besar telah Anda tetapkan dalamrender
metode Anda , tanpa memanggil response.end () , sesuatu seperti:Cara semuanya perlu disusun adalah seperti ini:
Middleware yang bagus
Middleware yang Bermasalah
Middleware yang bermasalah mengatur header respons tanpa panggilan
response.end()
dan panggilannext()
, yang membingungkan server connect.sumber
Beberapa jawaban dalam T&J ini salah. Jawaban yang diterima juga tidak terlalu "praktis", jadi saya ingin memposting jawaban yang menjelaskan hal-hal dalam istilah yang lebih sederhana. Jawaban saya akan mencakup 99% dari kesalahan yang saya lihat diposting berulang-ulang. Untuk alasan aktual di balik kesalahan, lihat jawaban yang diterima.
HTTP menggunakan siklus yang membutuhkan satu respons per permintaan. Ketika klien mengirim permintaan (misalnya POST atau GET) server hanya akan mengirim satu respons kembali ke sana.
Pesan kesalahan ini:
biasanya terjadi ketika Anda mengirim beberapa respons untuk satu permintaan. Pastikan fungsi-fungsi berikut dipanggil hanya sekali per permintaan:
res.json()
res.send()
res.redirect()
res.render()
(dan beberapa lagi yang jarang digunakan, periksa jawaban yang diterima)
Rute panggilan balik tidak akan kembali ketika fungsi res dipanggil. Ini akan terus berjalan sampai menyentuh akhir fungsi atau pernyataan kembali. Jika Anda ingin kembali saat mengirim tanggapan Anda dapat melakukannya seperti itu:
return res.send()
.Ambil contoh kode ini:
Ketika permintaan POST dikirim ke / api / route1, ia akan menjalankan setiap baris di callback. A Tidak dapat mengatur tajuk setelah dikirim pesan kesalahan akan dilemparkan karena
res.json()
dipanggil dua kali, artinya dua tanggapan dikirim.Hanya satu respons yang dapat dikirim per permintaan!
Kesalahan dalam contoh kode di atas jelas. Masalah yang lebih khas adalah ketika Anda memiliki beberapa cabang:
Rute ini dengan panggilan balik terlampir menemukan perusahaan dalam database. Ketika melakukan kueri untuk perusahaan yang tidak ada, kami akan masuk ke dalam
else if
cabang dan mengirim 404 tanggapan. Setelah itu, kami akan melanjutkan ke pernyataan berikutnya yang juga mengirimkan respons. Sekarang kami telah mengirim dua tanggapan dan pesan kesalahan akan muncul. Kami dapat memperbaiki kode ini dengan memastikan kami hanya mengirim satu respons:atau dengan mengembalikan ketika respons dikirim:
Orang berdosa besar adalah fungsi yang tidak sinkron. Ambil fungsi dari pertanyaan ini , misalnya:
Di sini kita memiliki fungsi asinkron (
findOneAndUpdate()
) dalam contoh kode. Jika tidak ada kesalahan (err
)findOneAndUpdate()
akan dipanggil. Karena fungsi ini asinkron makares.json(doc1)
akan dipanggil segera. Asumsikan tidak ada kesalahan dalamfindOneAndUpdate()
. Theres.json(doc2)
dielse
kemudian akan disebut. Dua tanggapan sekarang telah dikirim dan pesan kesalahan Tidak dapat mengatur tajuk terjadi.Perbaikan, dalam hal ini, akan menghapus
res.json(doc1)
. Untuk mengirim kedua dokumen kembali ke klienres.json()
yang lain dapat ditulis sebagaires.json({ article: doc1, user: doc2 })
.sumber
return
yangres.json
res.send
dalam untuk loop.Saya memiliki masalah yang sama dan menyadari bahwa itu karena saya menelepon
res.redirect
tanpareturn
pernyataan, jadinext
fungsinya juga dipanggil segera setelah itu:Yang seharusnya:
sumber
Banyak orang mengalami kesalahan ini. Ini membingungkan ini dengan pemrosesan async. Kemungkinan besar beberapa kode Anda mengatur tajuk di centang pertama dan kemudian Anda menjalankan panggilan balik async di centang di masa depan. Di antaranya, tajuk respons dikirim, tetapi tajuk lebih lanjut (seperti pengalihan 30X) mencoba menambahkan tajuk tambahan, tetapi sudah terlambat karena tajuk respons telah dikirim.
Saya tidak yakin persis apa yang menyebabkan kesalahan Anda, tetapi lihat semua panggilan balik sebagai area potensial untuk diselidiki.
Satu tip mudah untuk menyederhanakan kode Anda. Singkirkan
app.configure()
dan panggil sajaapp.use
langsung di lingkup tingkat atas Anda.Lihat juga modul everyauth , yang melakukan Facebook dan selusin penyedia otentikasi pihak ke-3 lainnya.
sumber
Saya membungkukkan kepala karena masalah ini dan itu terjadi karena kesalahan ceroboh dalam menangani panggilan balik. panggilan balik yang tidak dikembalikan menyebabkan respons diatur dua kali.!
Program saya memiliki kode yang memvalidasi permintaan dan permintaan DB. setelah memvalidasi jika ada kesalahan, saya menelepon kembali index.js dengan kesalahan validasi. Dan jika validasi lolos, ia melanjutkan dan mencapai db dengan sukses / gagal.
Apa yang terjadi adalah: memetikan validasi gagal callback dipanggil dan respons diatur. Tetapi tidak dikembalikan. Jadi masih berlanjut metode menuju ke db dan tekan sukses / gagal. Ini memanggil panggilan balik yang sama lagi menyebabkan respons diatur dua kali sekarang.
Jadi solusinya sederhana, Anda perlu 'mengembalikan' callback sehingga metode tidak melanjutkan eksekusi, setelah kesalahan terjadi dan karenanya mengatur objek respons sekali
sumber
callback(...)
tanpareturn;
setelah itu yang akhirnya menyebabkanres.send(...)
dipanggil dua kali.Jenis kesalahan ini akan Anda dapatkan ketika Anda menyampaikan pernyataan setelah mengirim respons.
Sebagai contoh:
Akan menghasilkan kesalahan yang Anda lihat, karena begitu respons telah dikirim, berikut ini
res.send
tidak akan dieksekusi.Jika Anda ingin melakukan sesuatu, Anda harus melakukannya sebelum mengirim respons.
sumber
Kadang-kadang Anda mungkin mendapatkan kesalahan ini ketika Anda mencoba memanggil fungsi next () setelah res.end atau res.send , cobalah untuk menghapus jika Anda memiliki fungsi next () setelah res.send atau res.end dalam fungsi Anda. Catatan: di sini next () berarti setelah menanggapi klien dengan respons Anda ( mis. Kirim ulang atau kirim ulang ), Anda masih mencoba menjalankan beberapa kode untuk merespons lagi sehingga tidak sah.
Contoh:
sumber
Jika Anda menggunakan fungsi panggilan balik, gunakan
return
setelaherr
pemblokiran. Ini adalah salah satu skenario di mana kesalahan ini dapat terjadi.Diuji pada versi Node
v10.16.0
dan ekspres4.16.4
sumber
Kesalahan ini terjadi ketika Anda mengirim 2 tanggapan. Sebagai contoh :
Bayangkan jika karena suatu alasan kondisi A dan B benar sehingga pada detik
render
Anda akan mendapatkan kesalahan itusumber
Dalam kasus saya itu adalah respons 304 (caching) yang menyebabkan masalah.
Solusi termudah:
Solusi alternatif di sini jika Anda ingin lebih banyak kontrol:
http://vlasenko.org/2011/10/12/expressconnect-static-set-last-modified-to-now-to-avoid-304-not-modified/
sumber
Dalam kasus saya ini terjadi dengan React dan postal.js ketika saya tidak berhenti berlangganan dari saluran dalam
componentWillUnmount
panggilan balik dari komponen React saya.sumber
Bagi siapa pun yang datang ke ini dan tidak ada solusi lain yang membantu, dalam kasus saya ini bermanifestasi pada rute yang menangani pengunggahan gambar tetapi tidak menangani batas waktu , dan dengan demikian jika pengunggahan terlalu lama dan kehabisan waktu, ketika panggilan balik dipecat setelah batas waktu respon telah dikirim , memanggil res.send () mengakibatkan crash karena tajuk sudah ditetapkan untuk memperhitungkan batas waktu.
Ini mudah direproduksi dengan menetapkan batas waktu yang sangat singkat dan mengenai rute dengan gambar yang cukup besar, kecelakaan itu direproduksi setiap waktu.
sumber
Hanya bersandar ini. Anda dapat meneruskan respons melalui fungsi ini:
sumber
Tambahkan middlware ini dan itu akan berhasil
sumber
Ini terjadi ketika respons dikirim ke klien dan lagi-lagi Anda mencoba memberikan respons. Anda harus memeriksa kode Anda bahwa di suatu tempat Anda mengembalikan respons ke klien lagi yang menyebabkan kesalahan ini. Periksa dan kembalikan respons sekali ketika Anda ingin kembali.
sumber
Saya memiliki masalah ini ketika saya bersarang janji. Sebuah janji di dalam janji akan mengembalikan 200 ke server, tetapi kemudian pernyataan tangkapan janji luar akan mengembalikan 500. Setelah saya memperbaiki ini, masalahnya hilang.
sumber
Datang ke sini dari nuxt , masalahnya adalah pada metode komponen
asyncData
, saya lupareturn
berjanji yang mengambil data dan mengatur tajuk di sana.sumber
Periksa apakah kode Anda mengembalikan beberapa pernyataan res.send () untuk satu permintaan. Seperti ketika saya memiliki masalah ini ....
Saya adalah masalah ini dalam aplikasi node restify saya. Kesalahannya adalah itu
switch (status) { case -1: res.send(400); case 0: res.send(200); default: res.send(500); }
Saya menangani berbagai kasus menggunakan sakelar tanpa jeda tulisan. Bagi mereka yang terbiasa dengan sakelar tahu bahwa tanpa putus, kembalikan kata kunci. Kode dalam huruf besar dan baris berikutnya akan dieksekusi tidak peduli apa. Jadi, meskipun saya ingin mengirim res.send tunggal, karena kesalahan ini ia mengembalikan beberapa res.send laporan, yang diminta
switch (status) { case -1: res.send(400); break; case 0: res.send(200); break; default: res.send(500); break; }
sumber
Sangat mungkin bahwa ini lebih merupakan hal simpul, 99% dari waktu itu merupakan panggilan balik ganda yang menyebabkan Anda merespons dua kali, atau berikutnya () dua kali dll, sangat yakin. Ini memecahkan masalah saya menggunakan next () di dalam satu lingkaran. Hapus next () dari loop atau berhenti memanggilnya lebih dari satu kali.
sumber
Saya mendapat kesalahan serupa ketika saya mencoba mengirim respons dalam fungsi loop. Solusi sederhana adalah memindahkan
keluar dari loop karena Anda hanya dapat mengirim tajuk respons sekali.
https://www.tutorialspoint.com/nodejs/nodejs_response_object.htm
sumber
Saya cukup menambahkan kata kunci kembali seperti:
return res.redirect("/great");
dan walla!sumber
Saya memiliki masalah yang sama yang disebabkan oleh luwak.
untuk memperbaikinya Anda harus mengaktifkan
Promises
, sehingga Anda dapat menambahkan:mongoose.Promise = global.Promise
ke kode Anda, yang memungkinkan penggunaannative js promises
.alternatif lain untuk soloution ini adalah:
dan
tetapi Anda harus menginstal paket ini terlebih dahulu.
sumber
kesalahan menemukan dengan sendirinya setelah RND:
1) kode kesalahan saya:
return res.sendStatus(200).json({ data: result });
2) kode kesuksesan saya
return res.status(200).json({ data: result });
perbedaannya adalah saya menggunakan sendStatus () alih-alih status () .
sumber
Dalam naskah, masalah saya adalah saya tidak menutup koneksi websocket setelah menerima pesan.
sumber
Jika Anda tidak mendapatkan bantuan dari atas: untuk noobs Alasan di balik kesalahan ini adalah mengirim permintaan beberapa kali, biarkan kami memahami dari beberapa kasus: - 1. `
`dalam panggilan di atas berikutnya () dua kali akan memunculkan kesalahan
router.delete('/:orderId', (req, res, next) => { Order.remove({_id:req.params.orderId},(err,data)=>{ if(err){ **res.status(500).json(err);** }else{ res.status(200).json(data); } *res.status(200).json(data);* }) })
di sini respons dikirim dua kali periksa apakah Anda sudah mengirim respons
sumber
Dalam kasus saya ini terjadi karena beberapa panggilan balik. Saya telah memanggil
next()
metode berkali-kali selama kodesumber
Masalah saya adalah saya
setInterval
menjalankan, yang memilikiif/else
blok, di manaclearInterval
metodenya berada di dalamelse
:Menempatkan
clearInterval
sebelumif/else
melakukan trik.sumber
Dalam kasus saya, Dalam satu lingkaran, saya
res.render()
mungkin telah mencoba menelepon beberapa kali.sumber
Yang harus saya lakukan jika kesalahan ini adalah res.end ().
Masalah lain yang mungkin Anda hadapi adalah ada kode setelah res.json dan res. menulis. Dalam hal ini, Anda harus menggunakan kembali untuk menghentikan eksekusi setelah itu.
sumber