Cara untuk memperbaiki Kesalahan: mendengarkan EADDRINUSE saat menggunakan nodejs?
Jika saya menjalankan server dengan port 80, dan saya mencoba untuk menggunakan xmlHTTPrequest saya mendapatkan error ini: Error: mendengarkan EADDRINUSE
Mengapa masalah untuk nodejs, jika saya ingin melakukan permintaan, sementara aku menjalankan server pada port 80? Untuk webbrowsers itu tidak masalah: saya bisa berselancar di internet, sementara server berjalan.
Server adalah:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
Dan permintaan:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState == 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("GET", "http://mywebsite.com");
xhr.send();
437
38
Apa yang benar-benar membantu bagi saya adalah:
Tapi ini akan membunuh proses sistem.
Dengan
anda dapat memeriksa apakah itu bekerja.
EADDRINUSE
berarti bahwa nomor port yanglisten()
mencoba untuk mengikat server sudah di gunakan.Jadi, dalam kasus anda, tidak harus menjalankan server pada port 80 sudah.
Jika anda memiliki web server yang berjalan pada port ini anda harus menempatkan node.js di balik itu server dan proxy itu melalui itu.
Anda harus memeriksa untuk
mendengarkan
acara seperti ini, untuk melihat apakah server adalah benar-benar mendengarkan:Tersebut
killall -9 node
, yang disarankan oleh Patrick bekerja seperti yang diharapkan dan memecahkan masalah, tetapi anda mungkin ingin membaca edit bagian ini sangat menjawab tentang mengapakill -9
mungkin bukan cara terbaik untuk melakukannya.Di atas bahwa anda mungkin ingin untuk menargetkan tunggal proses daripada membabi buta membunuh semua **** proses yang aktif.
Dalam hal ini, pertama mendapatkan proses ID (PID) dari proses yang berjalan pada port tersebut (katakanlah 8888):
lsof-i tcp:8888
Ini akan mengembalikan sesuatu seperti:
Kemudian lakukan (ps - benar-benar tidak. Silakan terus membaca di bawah ini):
kill -9 57385
Anda dapat membaca lebih banyak tentang ini di sini.
EDIT: saya membaca yang cukup terkait topik hari ini dan stumbled atas ini menarik benang pada mengapa saya harus tidak
kill -9
proses.Jadi, seperti yang dinyatakan anda harus lebih baik membunuh proses di atas dengan:
membunuh -15 57385
EDIT 2: Sebagai dicatat dalam komentar di sini banyak kali kesalahan ini adalah akibat dari tidak keluar dari proses anggun. Itu berarti, banyak orang-orang yang keluar dari node perintah (atau yang lain) dengan menggunakan CTRL+Z. Cara yang benar untuk menghentikan proses yang berjalan adalah mengeluarkan CTRL+C perintah yang melakukan keluar bersih.
Keluar proses dengan cara yang benar akan membebaskan port sementara mematikan. Ini akan memungkinkan anda untuk me-restart proses tanpa melalui kesulitan membunuh diri sendiri sebelum mampu untuk re-run lagi.
Hanya kepala's up, Skype akan kadang-kadang mendengarkan pada port 80 dan karena itu menyebabkan kesalahan ini jika anda mencoba untuk mendengarkan pada port 80 dari Node.js atau aplikasi lainnya.
Anda dapat menonaktifkan perilaku yang di Skype dengan mengakses pilihan dan mengklik Canggih -> Koneksi -> Menggunakan port 80 (Hapus centang ini)
Anda harus mencoba membunuh proses yang mendengarkan pada port 80.
Killall akan membunuh semua node aplikasi yang berjalan. Anda mungkin tidak ingin melakukan itu. Dengan perintah ini anda dapat membunuh hanya satu aplikasi yang mendengarkan pada yang terkenal pelabuhan.
Jika menggunakan unix coba perintah ini:
Di bawah controller env, anda bisa menggunakan:
pkill node
sebelum menjalankan script anda harus melakukan pekerjaan.Beruang di pikiran perintah ini akan membunuh semua
node
proses, yang mungkin benar jika anda memiliki aku.e wadah yang berjalan hanya satu contoh, kami telah anda seperti env di mana anda dapat menjamin itu.Dalam skenario lain, saya sarankan menggunakan perintah untuk membunuh proses tertentu id atau nama anda ditemukan dengan mencari hal pemrograman. seperti jika proses ini disebut, node-server-1 anda bisa melakukan
pkill node-server-1
.Sumber daya ini mungkin berguna untuk memahami: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
Ada dua solusi yang mungkin untuk mengatasi masalah ini di Windows/Mac
### 1. Gratis Nomor Port
Windows
Mac
Anda dapat mencoba netstat
Untuk OSX yosemite dan yang lebih baru (atau jika anda netstat doesn't dukungan -p), menggunakan lsof
jika ini tidak menyelesaikan masalah anda,
Mac
pengguna dapat merujuk untuk menyelesaikan diskusi tentang masalah ini https://stackoverflow.com/questions/3855127/find-and-kill-process-locking-port-3000-on-mac### 2. Mengubah Nomor Port?
Windows
Mac
Aplikasi anda sudah berjalan pada port 8080 . Gunakan kode ini untuk membunuh pelabuhan dan menjalankan kode anda lagi
Hal lain yang dapat memberikan kesalahan ini, adalah dua server HTTP dalam node yang sama kode. Saya memperbarui beberapa Express 2 untuk Mengekspresikan 3 kode, dan memiliki...
Dan, hal itu dipicu kesalahan ini.
Ini bekerja untuk saya (saya'm menggunakan mac). Jalankan perintah ini
lsof -PiTCP -sTCP:MENDENGARKAN
Ini's akan menampilkan daftar dari port yang anda syetem menggunakan. Menemukan
PID
yang anda node berjalandan menjalankan
kill -9 [YOUR_PID]
EADDRINUSE
berarti bahwa port(yang kita mencoba untuk mendengarkan node aplikasi) sudah digunakan. Dalam rangka untuk mengatasi ini, kita perlu mengidentifikasi proses yang berjalan dengan port tersebut.Misalnya jika kita mencoba untuk mendengarkan kami node aplikasi pada port 3000. Kita perlu memeriksa apakah port tersebut sudah digunakan oleh proses lain.
step1:
Yang di atas memberikan perintah di bawah ini hasilnya.
step2:
Sekarang anda punya ID proses(25315), Membunuh proses yang.
step3:
Catatan: Ini solusi untuk pengguna linux.
untuk kekuatan membunuh
menggunakan cmd di atas untuk membunuh port tertentu dan kemudian jalankan server anda
Cobalah kedua perintah dan ia akan menghentikan semua node proses.
Kesalahan ini muncul ketika anda memiliki setiap proses yang berjalan pada port yang anda inginkan untuk menjalankan aplikasi anda.
bagaimana untuk mendapatkan proses yang berjalan pada port=> perintah: sudo netstat -ap | grep :3000
output : anda akan mendapatkan informasi proses yang menggunakan port tersebut
tcp 0 0 IPaddress:3000 : MENDENGARKAN 26869/node
Sekarang anda dapat membunuh proses sudo kill -9 26869
EADDRINUSE berarti port nodejs aplikasi ini sudah di gunakan.
Di bawah perintah mengganti portNumber
Error: mendengarkan EADDRINUSE berarti port yang ingin anda tetapkan/bind ke server aplikasi yang sudah di gunakan. Anda dapat menetapkan port lain untuk aplikasi anda.
Atau jika anda ingin menentukan port yang sama untuk aplikasi. Kemudian membunuh aplikasi yang berjalan pada port yang diinginkan.
Untuk node aplikasi apa yang dapat anda coba adalah, menemukan proses id untuk node aplikasi dengan :
Setelah mendapatkan id proses, melakukan
Saya telah melihat kesalahan ini sebelum (node) dengan http.klien, dan seingat saya, masalah harus dilakukan dengan tidak menginisialisasi httpClient atau pengaturan pilihan buruk di httpClient penciptaan dan/atau di url permintaan.
Saya memiliki masalah yang sama juga,dan aku cukup dekat terminal dan buka terminal baru dan jalankan
lagi. yang bekerja untuk saya, beberapa waktu yang hanya perlu menunggu beberapa detik sampai bekerja lagi.
Tapi ini hanya bekerja pada pengembang mesin bukan dari server console..
Ada cara untuk menghentikan proses yang menggunakan Task Manager:
Pergi ke Task Manager (atau menggunakan shortcut Pilih + Shift + Spasi)
Pada "Latar belakang Proses", menemukan "Node.js" proses dan menghentikan mereka (klik Kanan dan pilih "Tugas Akhir")