Jika saya menjalankan server dengan port 80, dan saya mencoba menggunakan xmlHTTPrequest saya mendapatkan kesalahan ini:Error: listen EADDRINUSE
Mengapa masalah bagi nodejs, jika saya ingin melakukan permintaan, sementara saya menjalankan server pada port 80? Untuk webbrowsers itu bukan masalah: Saya bisa berselancar di internet, sementara server sedang berjalan.
Servernya adalah:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
Dan permintaannya:
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();
javascript
node.js
Danny Fox
sumber
sumber
Jawaban:
EADDRINUSE
berarti nomor port yanglisten()
mencoba mengikat server sudah digunakan.Jadi, dalam kasus Anda, harus sudah menjalankan server pada port 80.
Jika Anda memiliki server web lain yang berjalan di port ini, Anda harus meletakkan node.js di belakang server itu dan mem-proxy-nya.
Anda harus memeriksa
listening
acara seperti ini, untuk melihat apakah server benar-benar mendengarkan:sumber
Yang benar-benar membantu saya adalah:
Tetapi ini akan mematikan proses sistem.
Dengan
Anda dapat memeriksa apakah itu berhasil.
sumber
ps aux | grep node
akan menunjukkan itu. Alih-alih membunuh aplikasi dengan CTRL + Z , keluar dari aplikasi dengan CTRL + C . Ini keluar dari aplikasi dengan anggun dan pengikatan port dihapus.Yang disebutkan di atas
killall -9 node
, disarankan oleh Patrick berfungsi seperti yang diharapkan dan menyelesaikan masalah tetapi Anda mungkin ingin membaca bagian edit dari jawaban ini tentang mengapakill -9
mungkin bukan cara terbaik untuk melakukannya.Selain itu, Anda mungkin ingin menargetkan satu proses daripada membunuh semua proses aktif secara membabi buta .
Dalam hal itu, pertama-tama dapatkan ID proses (PID) dari proses yang berjalan pada port itu (katakanlah 8888):
lsof -i tcp:8888
Ini akan mengembalikan sesuatu seperti:
Maka lakukan saja (ps - sebenarnya tidak . Silakan baca terus di bawah):
kill -9 57385
Anda dapat membaca lebih banyak tentang ini di sini .
EDIT: Saya sedang membaca tentang topik yang cukup terkait hari ini dan menemukan utas menarik ini tentang mengapa saya tidak harus melakukan
kill -9
suatu proses .Jadi, seperti yang dinyatakan Anda sebaiknya mematikan proses di atas dengan:
kill -15 57385
EDIT 2 : Seperti disebutkan dalam komentar di sini beberapa kali kesalahan ini merupakan konsekuensi dari tidak keluarnya proses dengan anggun. Itu berarti, banyak orang keluar perintah simpul (atau lainnya) menggunakan CTRL + Z . Cara yang benar untuk menghentikan proses yang sedang berjalan adalah mengeluarkan perintah CTRL + C yang melakukan jalan keluar yang bersih.
Keluar dari proses dengan cara yang benar akan membebaskan port itu saat dimatikan. Ini akan memungkinkan Anda untuk memulai kembali proses tanpa melalui kesulitan membunuhnya sendiri sebelum dapat menjalankannya kembali.
sumber
pgrep node
menunjukkan jika ada proses simpul yang berjalan pada Anda.pkill node
akan membunuh mereka.Hanya sebentar saja, Skype kadang-kadang akan mendengarkan pada port 80 dan karena itu menyebabkan kesalahan ini jika Anda mencoba mendengarkan pada port 80 dari Node.js atau aplikasi lain.
Anda dapat menonaktifkan perilaku itu di Skype dengan mengakses opsi dan mengklik Tingkat Lanjut -> Koneksi -> Gunakan port 80 (Hapus centang ini)
sumber
Anda harus mencoba menghentikan proses yang mendengarkan pada port 80.
Killall akan membunuh semua aplikasi node yang berjalan. Anda mungkin tidak ingin melakukan itu. Dengan perintah ini Anda hanya dapat membunuh satu aplikasi yang mendengarkan pada port yang dikenal.
Jika menggunakan unix coba perintah ini:
sumber
Dua kemungkinan solusi untuk Windows / Mac
1. Nomor Port Gratis
Windows
Mac
Anda dapat mencoba netstat
Untuk OSX El Capitan dan yang lebih baru (atau jika netstat Anda tidak mendukung -p), gunakan lsof
jika ini tidak menyelesaikan masalah Anda,
Mac
pengguna dapat merujuk ke diskusi lengkap tentang masalah ini Temukan (dan bunuh) proses mengunci port 3000 di Mac2. Ubah Nomor Port?
Windows
Mac
sumber
netstat -ona | findstr ".0:PORT +0.0.0.0:0 +LISTENING" | for /f "tokens=5" %t in ('more') do taskkill /PID:%t /f
Di bawah kontroler env, Anda dapat menggunakan:
pkill node
sebelum menjalankan skrip Anda harus melakukan pekerjaan.Ingat perintah ini akan membunuh semua
node
proses, yang mungkin benar jika Anda memiliki sebuah wadah yang hanya menjalankan satu instance, kami memiliki env di mana Anda dapat menjamin hal itu.Dalam skenario lain, saya sarankan menggunakan perintah untuk membunuh id proses tertentu atau nama yang Anda temukan dengan mencarinya secara terprogram. seperti jika proses Anda dipanggil, simpul-server-1 bisa Anda lakukan
pkill node-server-1
.Sumber ini mungkin berguna untuk memahami: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
sumber
pgrep node
sebelum tangan jika Anda ingin sedikit berhati-hati dan melihatnode
proses apa yang sedang berjalanAplikasi Anda sudah berjalan di port 8080 itu. Gunakan kode ini untuk mematikan port dan menjalankan kode Anda lagi
sumber
kill -9
hampir pasti berlebihan, dan, menurut pendapat saya, nasihat yang mengerikan untuk diberikan tanpa peringatan khusus tentang Itu.kill
Mungkin hanya akan melakukan trik, dan sungguh, masalah mendasar dalam pertanyaan ini adalah, saya pikir, bahwa mereka mencoba untuk menjalankan kembali server berulang-ulang, jadi ini hanya peretasan, bukan perbaikan. Mereka perlu memiliki pemahaman yang lebih baik tentang apa yang terjadi, yang tidak benar-benar diberikan oleh jawaban ini.Hal lain yang dapat memberikan kesalahan ini, adalah dua server HTTP dalam kode simpul yang sama. Saya memperbarui beberapa kode Express 2 ke Express 3, dan punya ...
Dan, itu memicu kesalahan ini.
sumber
Ini berfungsi untuk saya (saya menggunakan mac). Jalankan perintah ini
lsof -PiTCP -sTCP:LISTEN
Ini akan menampilkan daftar port yang digunakan syetem Anda. Temukan
PID
node Anda sedang berjalandan lari
kill -9 [YOUR_PID]
sumber
EADDRINUSE
berarti bahwa port (yang kami coba dengarkan dalam aplikasi node) sudah digunakan. Untuk mengatasinya, kita perlu mengidentifikasi proses mana yang berjalan dengan port itu.Sebagai contoh jika kita mencoba mendengarkan aplikasi simpul kita di 3000 port. Kita perlu memeriksa apakah port itu sudah digunakan oleh proses lain.
Langkah 1:
Bahwa perintah di atas memberikan hasil di bawah ini.
Langkah 2:
Sekarang Anda mendapat ID proses (25315), Bunuh proses itu.
step3:
Catatan: Solusi ini untuk pengguna linux.
sumber
sumber
untuk membunuh kekuatan
gunakan cmd di atas untuk mematikan port tertentu dan kemudian jalankan server Anda
sumber
Coba kedua perintah dan itu akan menghentikan semua proses simpul.
sumber
Kesalahan ini terjadi ketika Anda memiliki proses yang berjalan pada port di mana Anda ingin menjalankan aplikasi Anda.
cara mendapatkan proses mana yang berjalan pada perintah port =>: sudo netstat -ap | grep: 3000
output: Anda akan mendapatkan informasi proses yang menggunakan port itu
tcp 0 0 Alamat IP: 3000 : LISTEN 26869 / node
Sekarang Anda dapat membunuh proses itu sudo kill -9 26869
sumber
Pada perintah di bawah ini ganti portNumber Anda
sumber
EADDRINUSE berarti port aplikasi nodejs Anda sudah digunakan.
sumber
Ada cara untuk menghentikan proses menggunakan Task Manager:
Buka Pengelola Tugas (atau menggunakan pintasan Ctrl+ Shift+ Esc)
Pada "Proses Latar Belakang", cari proses "Node.js" dan hentikan prosesnya (Klik kanan dan pilih "Akhiri Tugas")
sumber
Saya telah melihat kesalahan ini sebelumnya (dalam node) dengan http.client, dan seingat saya, masalahnya ada pada tidak menginisialisasi httpClient atau pengaturan opsi buruk dalam pembuatan httpClient dan / atau dalam permintaan url.
sumber
Saya memiliki masalah yang sama juga, dan saya cukup menutup terminal dan membuka terminal baru dan jalankan
lagi. itu bekerja untuk saya, beberapa waktu hanya perlu menunggu beberapa detik sampai bekerja lagi.
Tetapi ini hanya berfungsi pada mesin pengembang dan bukan pada konsol server ..
sumber
Kesalahan: mendengarkan EADDRINUSE berarti port yang ingin Anda tetapkan / ikat ke server aplikasi Anda sudah digunakan. Anda dapat menetapkan port lain untuk aplikasi Anda.
Atau jika Anda ingin menetapkan port yang sama ke aplikasi. Kemudian bunuh aplikasi yang berjalan di port yang Anda inginkan.
Untuk aplikasi simpul yang dapat Anda coba adalah, cari id proses untuk aplikasi simpul dengan:
Setelah mendapatkan id proses, lakukan
sumber
Pada Debian saya menemukan untuk dijalankan pada port 80 Anda perlu mengeluarkan perintah sebagai root yaitu
Saya harap ini membantu
sumber
Dalam kasus saya Apache HTTP Server dijalankan pada port 80 saya menyelesaikannya dengan mengeluarkan perintah sebagai root
sudo killall httpd
Memperbarui
Jika Jenkin diinstal dan dijalankan pada Mac Anda;
sudo lsof -i tcp:8080
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
sumber
Tampaknya ada proses melayani Node ng lain berjalan. Periksa dengan mengetik ini di konsol Anda (Linux / Mac):
dan berhenti dengan:
ATAU penggunaan alternativley
untuk melayani proyek Anda di pelabuhan gratis pilihan Anda.
sumber
Saat membunuh NODE_PORT, itu mungkin membunuh proses chrome Anda atau apa pun yang mendengarkan port yang sama, dan itu menjengkelkan.
Skrip shell ini mungkin membantu - dalam kasus saya portnya adalah 1337 tetapi Anda dapat mengubahnya kapan saja
sumber
Dalam kasus saya, saya menggunakan hosting web tetapi sama dengan host lokal, saya menggunakan:
untuk menonton proses simpul itu, konsol menunjukkan proses dengan PID. untuk mematikan proses Anda harus menggunakan perintah ini:
di mana PID adalah id proses dari perintah di atas.
sumber
Dua server tidak dapat mendengarkan pada port yang sama, jadi periksa apakah server lain mendengarkan pada port yang sama, juga periksa untuk sinkronisasi browser jika berjalan pada port yang sama
sumber
Untuk orang lain di windows 10 dengan simpul sebagai
localhost
dan berjalan pada port seperti 3.500, bukan 80 ...Apa yang tidak berhasil:
Apa yang menunjukkan informasi tetapi tetap tidak berfungsi:
Apa yang berhasil:
Git Bash atau Powershell di Windows
Perhatikan PID (paling kanan)
saya tidak bisa mulai
killall
bekerja ... begituSekarang setelah latihan yang tidak begitu menyenangkan di windows, saya menyadari bahwa saya dapat menggunakan task manager dan menemukan mesin Node dan hanya mengakhirinya.
FYI, saya menggunakan Visual Studio Code untuk menjalankan Node pada port 3500, dan saya menggunakan shell Git Bash di dalam kode VS. Saya telah keluar dengan anggun dengan Ctrl + C, tetapi kadang-kadang ini tidak membunuhnya. Saya tidak ingin mengubah port saya atau reboot jadi ini berfungsi. Semoga ini bisa membantu orang lain. Kalau tidak, itu adalah dokumentasi untuk saya sendiri.
sumber
Untuk pengguna windows, jalankan perintah berikut di jendela PowerShell untuk mematikan semua proses simpul.
sumber
Opsi yang berfungsi untuk saya:
Lari:
Anda akan mendapatkan sesuatu seperti:
sumber