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();
Mengomentari pertanyaan (5)

Apa yang benar-benar membantu bagi saya adalah:

killall -9 node

Tapi ini akan membunuh proses sistem.

Dengan

ps ax

anda dapat memeriksa apakah itu bekerja.

Komentar (13)
Larutan

EADDRINUSE berarti bahwa nomor port yang listen() 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:

var http=require('http');

var server=http.createServer(function(req,res){
    res.end('test');
});

server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(80);
Komentar (3)

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 mengapa kill -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:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1 (LISTEN)

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.

Umumnya, anda harus menggunakan membunuh -15 sebelum kill -9 untuk memberikan proses target kesempatan untuk membersihkan setelah sendiri. (Proses't menangkap atau mengabaikan SIGKILL, tetapi mereka dapat dan sering menangkap SIGTERM.) Jika anda don't memberikan proses kesempatan untuk menyelesaikan apa itu's melakukan dan bersih, ini mungkin meninggalkan file-file yang rusak (atau negara lain) di sekitar yang tidak't dapat memahami setelah restart.

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.

Komentar (9)

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)

P. S. Setelah membuat perubahan itu, don't lupa untuk me-restart Skype!

Komentar (5)

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:

sudo fuser -k 80/tcp    
Komentar (3)

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/

Komentar (8)

Kesalahan alasan: Anda mencoba untuk menggunakan sibuk port number

Ada dua solusi yang mungkin untuk mengatasi masalah ini di Windows/Mac

  1. Gratis saat ini digunakan nomor port
  2. Pilih nomor port untuk program anda saat ini

### 1. Gratis Nomor Port

Windows

1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F

Mac

Anda dapat mencoba netstat

netstat -vanp tcp | grep 3000

Untuk OSX yosemite dan yang lebih baru (atau jika anda netstat doesn't dukungan -p), menggunakan lsof

sudo lsof -i tcp:3000

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

set PORT=5000

Mac

export PORT=5000
Komentar (1)

Aplikasi anda sudah berjalan pada port 8080 . Gunakan kode ini untuk membunuh pelabuhan dan menjalankan kode anda lagi

sudo lsof -t -i tcp:8080 | xargs kill -9
Komentar (1)

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...

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});        

// tons of shit.

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});                                                                   

Dan, hal itu dipicu kesalahan ini.

Komentar (0)

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 berjalan

COMMAND     PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node      17269 hientrq   16u  IPv6 0xc42959c6fa30c3b9      0t0  TCP *:51524 (LISTEN)
node      17269 hientrq   19u  IPv4 0xc42959c71ae86fc1      0t0  TCP localhost:1337 (LISTEN)

dan menjalankan kill -9 [YOUR_PID]

Komentar (0)

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:

$sudo netstat -plunt |grep :3000

Yang di atas memberikan perintah di bawah ini hasilnya.

tcp6       0      0 :::3000                 :::*                    LISTEN      25315/node

step2:

Sekarang anda punya ID proses(25315), Membunuh proses yang.

kill -9 25315

step3:

npm run start

Catatan: Ini solusi untuk pengguna linux.

Komentar (0)

sudo kill $(sudo lsof -t -i:80)

untuk kekuatan membunuh

sudo kill -9 $(sudo lsof -t -i:80)

menggunakan cmd di atas untuk membunuh port tertentu dan kemudian jalankan server anda

Komentar (0)

Cobalah kedua perintah dan ia akan menghentikan semua node proses.

killall 9 node
pkill node
npm start 
Komentar (0)

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

Komentar (1)

EADDRINUSE berarti port nodejs aplikasi ini sudah di gunakan.

  • Sekarang anda telah membunuh proses aplikasi yang berjalan pada port tersebut.
  • Menemukan id proses dari aplikasi dengan:

lsof-i tcp:3000

  • Sekarang anda akan mendapatkan id proses dari ini.
  • Jalankan ini:

kill -9 processId

Komentar (0)

Di bawah perintah mengganti portNumber

sudo lsof -t -i tcp:portNumber | xargs kill -9
Komentar (0)

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 :

ps -aux | grep node

Setelah mendapatkan id proses, melakukan

kill process_id
Komentar (3)

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.

Komentar (1)

Saya memiliki masalah yang sama juga,dan aku cukup dekat terminal dan buka terminal baru dan jalankan

node server.js

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..

Komentar (0)

Ada cara untuk menghentikan proses yang menggunakan Task Manager:

Perhatikan bahwa solusi ini hanya tersedia untuk Windows

  1. Pergi ke Task Manager (atau menggunakan shortcut Pilih + Shift + Spasi)

  2. Pada "Latar belakang Proses", menemukan "Node.js" proses dan menghentikan mereka (klik Kanan dan pilih "Tugas Akhir")

  1. Sekarang anda harus dapat mulai lagi
Komentar (1)