Bagaimana untuk Menyelesaikan 'Ralat: dengar EADDRINUSE: alamat sudah digunakan'?

Bagaimana Untuk Menyelesaikan Ralat Dengar Eaddrinuse Alamat Sudah Digunakan



Node.js ialah persekitaran masa jalan yang membenarkan kod yang ditulis dalam bahasa JavaScript untuk dilaksanakan melalui halaman web atau pelayan setempat. Ia adalah persekitaran berbenang tunggal dan mempunyai sifat tak segerak. Ia menawarkan pelbagai modul terbina dalam dan luaran yang boleh digunakan untuk melaksanakan pelbagai operasi seperti menghantar permintaan HTTP melalui pelayan. Semasa berinteraksi dengan pelbagai pelayan tempatan terdapat peluang untuk mendapatkan berbilang ralat yang diselesaikan dengan mengikuti panduan khusus.

Panduan ini menerangkan kemungkinan pembetulan untuk 'dengar EADDRINUSE: alamat sudah digunakan' dengan merangkumi bahagian di bawah:

Bagaimana untuk Menyelesaikan 'Ralat: dengar EADDRINUSE: alamat sudah digunakan'?

' Ralat: dengar EADDRINUSE: alamat sudah digunakan ” timbul apabila lebih daripada satu aplikasi atau tugasan cuba mengakses port yang sama. Ralat ini boleh dibangkitkan semasa fasa ujian atau pembangunan. Sebagai contoh, ralat yang disebutkan di atas akan dihasilkan untuk pemahaman yang lebih baik:







const expressObj = memerlukan ( 'ekspres' )
const demoApp = expressObj ( )
demoApp. dapatkan ( '/' , ( req, res ) => {
semula json ( {
nama : 'Artikel Linux mengenai CORS' ,
bahasa : 'Node.js' ,
permohonan : 'corsApp' ,
asal usul : 'Cross Origin' ,
perisian tengah : 'CORS'
} )
} )
demoApp. dengar ( 8080 , ( ) => {
konsol. log ( `Pelayan dimulakan 'http://localhost:8080/' ` )
} )
demoApp. dengar ( 8080 , ( ) => {
konsol. log ( `Pelayan dimulakan 'http://localhost:8080/' ` )
} )

Coretan kod di atas berfungsi seperti ini:



  • Pertama, import ' ekspres 'modul dan simpan objeknya dalam pembolehubah baharu' expressObj ”. Gunakan pembolehubah ini sebagai pembina untuk mencipta aplikasi ekspres baharu bernama “ demoApp ”.
  • Seterusnya, buat permintaan GET menggunakan ' dapatkan() ' kaedah dan tetapkan halaman utama sebagai pengendali akar dengan menghantar ' / ” sebagai parameter pertama. Parameter kedua ialah fungsi panggil balik tanpa nama yang menghantar “ JSON ” data sebagai tindak balas dengan penggunaan “ json() ” kaedah.
  • Selepas itu, jadikan apl itu dilaksanakan pada nombor port yang sama ' 8080 ' dua kali. Pelaksanaan port yang sama ini dua kali menjana ralat yang disebutkan.

Output yang dijana selepas penyusunan kod di atas menunjukkan berlakunya ralat 'Ralat: dengar EADDRINUSE: alamat sudah digunakan':







Terdapat terutamanya dua penyelesaian untuk menyelesaikan ralat yang berlaku dalam output di atas iaitu menukar nombor port atau menghentikan salah satu proses yang sedang berjalan. Tetapi terdapat beberapa pembaikan lain juga yang secara tidak langsung menyelesaikan ' Ralat: dengar EADDRINUSE: alamat sudah digunakan ” kesilapan. Penyelesaian ini bersama dengan demonstrasi praktikal dinyatakan di bawah:

Penyelesaian 1: Jalankan Proses pada Port Berbeza

Penyelesaian yang paling disyorkan untuk ralat yang disebutkan adalah untuk mengenal pasti nombor port di mana kedua-dua perkhidmatan berjalan seperti dalam kes kami ia adalah ' 8080 ”. Kemudian, pilih satu perkhidmatan secara rawak dan ubah suai nombor portnya untuk menjadikan perkhidmatan mendengar pada localhost tetapi dengan nombor port yang berbeza. Kod kami selepas pengubahsuaian yang dibincangkan ditunjukkan di bawah:



const expressObj = memerlukan ( 'ekspres' )
const demoApp = expressObj ( )
demoApp. dapatkan ( '/' , ( req, res ) => {
semula json ( {
nama : 'Artikel Linux mengenai CORS' ,
bahasa : 'Node.js' ,
permohonan : 'corsApp' ,
asal usul : 'Cross Origin' ,
perisian tengah : 'CORS'
} )
} )
demoApp. dengar ( 8080 , ( ) => {
konsol. log ( `Pelayan dimulakan 'http://localhost:8080/' ` )
} )
demoApp. dengar ( 3000 , ( ) => {
konsol. log ( `Pelayan dimulakan 'http://localhost:8080/' ` )
} )

Output yang dihasilkan selepas melaksanakan kod di atas menunjukkan bahawa kini ' Ralat: dengar EADDRINUSE: alamat sudah digunakan 'isu telah diselesaikan:

Penyelesaian 2: Menghentikan Proses Berjalan pada Port yang Sama

Satu lagi cara untuk menyelesaikan ralat 'dengar EADDRINUSE: alamat sudah digunakan' ialah dengan menghentikan proses berjalan pada port tertentu yang sudah digunakan. Ini akan menjadikan port melahu yang boleh diakses oleh pembangun untuk melaksanakan tugas yang ditentukan. Proses pemberhentian ini dilakukan dengan bantuan modul luaran bernama “ bunuh-pelabuhan ”.

Sebagai contoh, semua proses yang berjalan pada nombor port yang ditentukan ' 8080 ' akan dibunuh menggunakan ' bunuh-pelabuhan ” modul. Terdapat dua cara untuk menggunakan modul 'kill-port' dan kedua-dua pendekatan ini dinyatakan di bawah:

Kaedah 1: Gunakan Modul 'kill-port' Selepas Pemasangan

' bunuh-pelabuhan ” modul ialah modul luaran pihak ketiga dan untuk menggunakan modul ini di dalam projek node.js. Modul ini perlu dimuat turun terlebih dahulu dengan melaksanakan arahan yang dinyatakan di bawah:

npm install kill - pelabuhan - g

Rajah di bawah menunjukkan penyiapan pemasangan untuk ' bunuh-pelabuhan ” pembolehubah:

Selepas pemasangan, pengguna boleh mematikan perkhidmatan untuk nombor port yang diperlukan. Dalam kes kami, perkhidmatan nombor port ' 8080 ' akan dibunuh melalui arahan yang dinyatakan di bawah:

bunuh - pelabuhan -- pelabuhan 8080

Output di bawah mengesahkan bahawa semua perkhidmatan untuk port ' 8080 'telah dibunuh:

Kaedah 2: Gunakan Modul 'kill-port' Tanpa Pemasangan

' bunuh-pelabuhan 'modul boleh digunakan tanpa melalui proses pemasangan dengan menggunakan ' npx ” pelari pakej. Sebagai contoh, ' bunuh-pelabuhan 'modul sedang digunakan untuk membunuh dua port tertentu menggunakan arahan pelari pakej 'npx' yang dinyatakan di bawah:

membunuh npx - pelabuhan 8080 9000

Output di bawah menunjukkan bahawa perkhidmatan untuk port tertentu ' 9000 ” dan “ 8080 'telah dibunuh:

Petua Bonus: Nyahpasang Modul 'kill-port'.

Untuk menyahpasang ' bunuh-pelabuhan ” modul secara global daripada sistem laksanakan arahan yang dinyatakan di bawah:

npm uninstall kill - pelabuhan - g

Penyelesaian 3: Tamatkan Perkhidmatan Node.js pada Windows

Jika 'Ralat: dengar EADDRINUSE: alamat sudah digunakan' masih berterusan, kemudian matikan semua yang sedang berjalan ' node.js ” perkhidmatan sama ada menggunakan pendekatan GUI atau CLI.

Menggunakan Pendekatan CLI

Tekan ' Tingkap butang ” untuk membuka bar carian dan masukkan “ CMD ” di dalam kotak carian, daripada hasil yang dijana. Kemudian, pilih ' Arahan prompt ' aplikasi, dan tekan ' Jalankan sebagai pentadbir butang ”:

Dengan memilih pilihan, tetingkap baharu Control Prompt akan muncul, untuk mematikan perkhidmatan 'node.js' yang sedang berjalan di latar belakang, laksanakan arahan di bawah:

membunuh tugas / F / nod IM. exe

Output yang dijana menunjukkan bahawa perkhidmatan 'node.js' telah ditamatkan:

Menggunakan Pendekatan GUI

Untuk mematikan perkhidmatan node.js yang sedang berjalan daripada sistem, buka “ Pengurus Tugas ” dengan menekan “ Ctrl + Shift + Esc ” kunci serta-merta. Selepas membuka 'Pengurus Tugas', lalui ke ' Butiran ” taip, pilih “ node.exe perkhidmatan ” dan tekan “ Tamat Tugas ” butang yang berada di bahagian bawah arah kanan, seperti yang ditunjukkan di bawah:

Itu sahaja tentang menyelesaikan 'Ralat: dengar EADDRINUSE: alamat sudah digunakan' dalam Node.js.

Kesimpulan

'Ralat: dengar EADDRINUSE: alamat sudah digunakan' timbul apabila lebih daripada satu perkhidmatan cuba menggunakan satu port pada masa yang sama. Untuk menyelesaikannya, pengguna harus cuba menggunakan nombor port yang berbeza atau mematikan perkhidmatan yang sudah berjalan pada nombor port yang ditentukan menggunakan ' bunuh-pelabuhan ” modul. Jika ralat masih tidak diselesaikan, bunuh semua yang sedang berjalan ' node.js ” perkhidmatan daripada pengurus tugas dan mulakan semula aplikasi anda. Panduan ini telah menggambarkan penyelesaian yang mungkin untuk menyelesaikan isu 'Ralat: dengar EADDRINUSE: alamat sudah digunakan'.