ExpressJS - throw er event unhandled error

180

Saya membuat aplikasi expressjs menggunakan perintah berikut:

express -e folderName
npm install ejs --save
npm install

Ketika saya menjalankan aplikasi dengan:, node app.jssaya memiliki kesalahan berikut:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: listen EADDRINUSE
    at errnoException (net.js:884:11)
    at Server._listen2 (net.js:1022:14)
    at listen (net.js:1044:10)
    at Server.listen (net.js:1110:5)
    at Object.<anonymous> (folderName/app.js:33:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

Bagaimana memperbaikinya?

JR Galia
sumber
30
EADDRINUSE berarti bahwa port sudah digunakan. coba ubah port apa yang digunakan server web di app.js atau bunuh apa pun yang saat ini menggunakan port itu jika Anda tidak membutuhkannya.
go-oleg
Jika menutup port tidak diperbaiki, coba ini> stackoverflow.com/a/52441297/6665568
Natesh bhat

Jawaban:

400

Anda telah menjalankan server lain menggunakan port yang sama seperti 8080.

Mungkin Anda telah menjalankan node appshell lain, Silakan tutup dan jalankan lagi.

Anda dapat memeriksa PORT no. tersedia atau tidak menggunakan

netstat -tulnp | grep <port no>

Atau, Anda dapat menggunakan lsof :

lsof -i :<port no>
Glowin
sumber
4
Saya berlari ke ini menggunakan WebStorm. Saya memiliki dua sesi debug terbuka di ruang kerja yang sama. Doh!
Nick Curran
53
Kesalahan umum semacam itu benar-benar layak mendapatkan pesan kesalahan yang lebih baik.
Tamlyn
Ini terjadi pada saya ketika menggunakan direktori simpul-aktif. BaseDN saya tidak memiliki subdomain. baseDN: 'ldap: // dc = subdomain, dc = domain, dc = com'
Tandai
Sedang menjalankan instance rails server...: |
Sheharyar
1
pada mac high sierra: lsof -nP -i4TCP: $ PORT | grep LISTEN
Roee
61

Kami mendapatkan kesalahan serupa ketika kami terkadang menjalankan aplikasi ekspres kami. Kita harus mengikuti hal yang sama dalam kasus itu. Kita perlu memeriksa apakah beroperasi di terminal apa pun. Jika Anda ingin menemukan dan membunuh proses, ikuti langkah-langkah ini:

  • ps aux | simpul grep
  • Temukan ID proses (kedua dari kiri):
  • bunuh -9 PRCOCESS_ID

ATAU

Gunakan satu perintah untuk menutup semua proses simpul yang berjalan.

ps aux | awk '/node/{print $2}' | xargs kill -9
monis
sumber
5
ps aux | grep node | awk '{print $2}' | xargs kill -9
Daniel
killall -r node(di linux)
jt3k
25

Sebuah instance mungkin masih berjalan. Ini akan memperbaikinya.

killall node

Pembaruan: Perintah ini hanya akan berfungsi di Linux / Ubuntu & Mac.

TawabG
sumber
1
killall -9 node
Pankaj Shinde
16

Jika Anda menggunakan Linux, masalah ini juga dapat terjadi jika Nodejs tidak berjalan sebagai root.

Ubah dari ini:

nodejs /path/to/script.js

Untuk ini:

sudo nodejs /path/to/script.js

Kebetulan pada saya dan tidak ada saran lain di sini memperbaikinya. Untungnya saya ingat skrip bekerja beberapa hari yang lalu ketika dijalankan sebagai root. Semoga ini bisa membantu seseorang!

Penafian: Ini mungkin bukan solusi terbaik untuk lingkungan produksi. Memulai layanan Anda sebagai root dapat memperkenalkan beberapa celah keamanan ke server / aplikasi Anda. Dalam kasus saya, ini adalah solusi untuk layanan lokal, tetapi saya akan mendorong orang lain untuk menghabiskan lebih banyak waktu mencoba mengisolasi penyebabnya.

Efek Tanpa Pengaruh
sumber
1
Kedengarannya sangat berbahaya hanya menjalankan skrip sebagai root untuk menyelesaikan masalah ini. Kecuali Anda mencoba mengikat ke port di bawah 1024, Anda seharusnya tidak perlu menjalankan simpul sebagai root. Saya menduga dalam kasus Anda, Anda mencoba untuk mengikat ke port 80 atau 443. Saya akan menyarankan menggunakan Nginx untuk mengarahkan lalu lintas dari port tersebut ke nodejs pada port yang lebih tinggi, seperti 8000 atau sesuatu.
varikin
1
Terima kasih telah menunjukkannya. Saya tidak berpikir skrip tertentu yang saya gunakan dipanggil untuk salah satu port tersebut, saya pasti tidak menggunakan Node sebagai server http. Mungkin itu salah satu modul yang saya gunakan yang meminta izin tambahan? Saya minta maaf sudah lama jadi saya bahkan tidak yakin skrip mana yang meminta solusi ini. Saya akan menambahkan penafian tentang upaya ini di lingkungan produksi.
Efek Tanpa Efek
12

Ini karena port yang Anda gunakan untuk menjalankan skrip sudah digunakan. Anda harus menghentikan semua node lain yang menggunakan pos itu. untuk itu, Anda dapat memeriksa semua simpul dengan

ps -e

ATAU hanya untuk proses simpul gunakan ps -ef | grep node ini akan memberi Anda daftar semua proses simpul dengan id

untuk Membunuh semua proses simpul

sudo killall -9 node

Atau untuk id tertentu sudo kill -9 id

Abhinav bhardwaj
sumber
Anda menyelamatkan MALAM saya!
Mujtaba Mahmood
8

Saya memperbaiki bug dengan mengubah port yang sebelumnya

app.set('port', process.env.PORT || 3000);<br>

dan diubah menjadi:

app.set('port', process.env.PORT || 8080);<br>
marcdahan
sumber
1
Apa bedanya dengan menerapkan apa yang dikatakan oleh jawaban yang diterima pada jawaban yang diberikan oleh Mark?
EWit
3

Port Node yang coba digunakan bisa sudah digunakan oleh program lain. Dalam kasus saya itu ntop , yang saya instal baru-baru ini. Saya harus membuka http: // localhost: 3000 / di browser untuk menyadarinya. Cara lain untuk menemukan proses diberikan di sini .

Fabien
sumber
2

Jika Anda ingin menggunakan nomor port yang sama maka ketikkan kill %terminal, yang membunuh proses latar belakang saat ini dan membebaskan port untuk penggunaan lebih lanjut.

Suneha Javid
sumber
2

ini berarti file Anda sedang berjalan sekarang. cukup masukkan kode di bawah ini dan coba lagi:

sudo pkill node
Abolfazl Miadian
sumber
1

Tutup semua server node lain yang sedang berjalan, bahkan jika mereka berada di jendela terminal lain atau berjalan di port yang berbeda. Itu harus memperbaiki masalah.

Jake McGuire
sumber
1

Jika Anda telah mencoba mematikan semua instance node dan layanan lain dengan mendengarkan 3000 (default yang digunakan oleh setup kerangka express) tidak berhasil, Anda harus memeriksa untuk memastikan bahwa lingkungan Anda tidak mendefinisikan 'port' menjadi sesuatu yang tidak terduga. Jika tidak, Anda mungkin akan mendapatkan kesalahan yang sama. Dalam file app.js kerangka express Anda akan melihat baris 15:

app.set('port', process.env.PORT || 3000);
Menandai
sumber
1

Untuk memperbaikinya, hentikan atau tutup server yang Anda jalankan. Jika Anda menggunakan Eclipse IDE, ikuti ini,

Jalankan> Debug

masukkan deskripsi gambar di sini

Klik kanan proses yang sedang berjalan dan klik Hentikan .

Prashanth Sams
sumber
1

events.js: 183 throw er; // Peristiwa 'kesalahan' yang tidak ditangani

Saya juga mendapat masalah yang sama dan mencoba banyak cara tetapi akhirnya berhasil, ini bekerja dengan baik:

npm install ws@3.3.2 --save-dev --save-exact

Lihat tautan ini untuk klarifikasi lebih lanjut https://github.com/ionic-team/ionic-cli/issues/2922

Janith Udara
sumber
1

Sebenarnya tombol Ctrl + C tidak melepaskan port yang digunakan oleh proses simpul. Jadi ada kesalahan ini. Resolusi untuk masalah ini menggunakan cuplikan kode berikut di server.js:

process.on('SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(1);
});

Ini berhasil untuk saya.

Anda juga dapat memeriksa solusi lain yang disebutkan pada shutdown Graceful di NodeJS

Pankaj Shinde
sumber
1

Alasan untuk kesalahan ini

Beberapa proses lain sudah berjalan pada port yang telah Anda tentukan

Solusi sederhana dan cepat

Di OS Linux, Misalnya Anda telah menetapkan 3000 sebagai port

  • Buka terminal dan jalankan lsof -i :3000. Jika ada proses yang sudah berjalan pada port 3000 maka Anda akan melihat pencetakan ini di konsol

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)

  • Salin PID (ID proses) dari output

  • Jalankan sudo kill -9 16615(Anda harus meletakkan PID setelah -9)

  • Mulai server lagi
Hadi Mir
sumber
0

Dalam kasus saya, saya harus menjalankan vagrant reloadjuga. Bahkan tanpa proses simpul menjalankan aplikasi ekspres saya di mesin virtual saya, saya masih mendapatkan kesalahan ini sampai memuat ulang kotak gelandangan.

cbaigorri
sumber
0

Hentikan layanan yang menggunakan port itu.

sudo service NAMEOFSERVICE stop
Rick
sumber
0

Dalam kasus saya, masalah ini disebabkan oleh lupa memanggil panggilan next()metode `penggunaan 'expressjs.

Jika middleware saat ini tidak mengakhiri siklus permintaan-respons, ia harus memanggil next () untuk memberikan kontrol ke middleware berikutnya, jika tidak, permintaan akan dibiarkan menggantung.

http://expressjs.com/guide/using-middleware.html

Andrew Dwyer
sumber
0

Anda juga dapat mengubah port dari Gruntfile.js dan jalankan kembali.

Narendra Solanki
sumber
0

Setelah membunuh proses yang sama beberapa kali dan tidak dapat menemukan apa lagi yang berjalan pada port 8000, saya menyadari saya mencoba untuk menjalankan pada port 8000 dua kali:

Sebelum:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
app.listen(port, () => {
  console.log("We are live on " + port);
});

Setelah:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
Andrew Southard
sumber
0

Saya memiliki masalah yang sama dan saya tahu, bahwa proses nodejs yang sebelumnya saya batalkan dengan CTRL + C masih berjalan. Masalah pada Windows 10 adalah, bahwa Ctrl + C tidak membunuh anggun nodejs. Saya membuka task manager dan mematikan prosesnya secara manual. Solusi yang disediakan di GitHub tidak bekerja untuk saya.

Gregor Weichbrodt
sumber
0

Jika Anda menggunakan windows, maka Anda dapat mengakhiri proses dari task manager untuk node.js

CodeRider
sumber
0

Tidak ada jawaban yang cocok untuk saya.

Ketika saya me-restart komputer saya, saya bisa menjalankan dan menjalankan server.

Mac
shutdown now -r

Linux
sudo shutdown now -r

tiagomenegaz
sumber
0

-> periksa apa yang berjalan pada port 8080 atau port apa yang ingin Anda periksa

lsof -i @localhost:8080

jika ada sesuatu yang berjalan, Anda dapat menutupnya atau menggunakan perintah kill untuk menutupnya

rabiaasif
sumber
0

Sederhana cukup periksa teminal Anda di Visual Studio Code Karena saya menjalankan aplikasi node saya dan saya hibernasi laptop saya maka keesokan paginya saya menghidupkan laptop saya kembali untuk pengembangan perangkat lunak. Lalu saya menjalankan lagi perintah nodemon app.js Pertama berjalan dari malam dan yang kedua menjalankan perintah terbaru saya sehingga dua perintah meminta mendengarkan port yang sama itu sebabnya Anda mendapatkan masalah ini. Sederhana Tutup satu termianl atau semua terminal kemudian jalankan node app.js atau nodemon app.js Anda

zaib
sumber
0

Port yang Anda dengarkan sudah didengarkan oleh proses lain.

Ketika saya menghadapi kesalahan ini, saya mematikan proses menggunakan Windows PowerShell (karena saya menggunakan Windows)

  1. Daftar itembuka windows PowerShell
  2. ketik psdan kemudian Anda bisa mendapatkan daftar proses
  3. temukan proses bernama node , dan catat Id
  4. ketik Stop-process <Id> saya pikir itu adalah bantuan untuk pengguna windows
Anush
sumber
0

Saya mengalami masalah yang sama hari ini dan port tidak digunakan. Pendekatan berikut membantu:

rm -rf node_modules && npm cache clean && npm install
npm start
seb_dom
sumber
0

JIKA ada di mac maka itu semua tentang IP x86_64-apple-darwin13.4.0. Jika Anda mengikuti kesalahan, itu akan terkait dengan x86_64-apple-darwin13.4.0. Menambahkan

127.0.0.1 x86_64-apple-darwin13.4.0

ke / etc / hosts file. Lalu masalahnya hilang

Shravan
sumber
-1

Cukup ganti port Anda, mungkin port Anda saat ini sedang digunakan oleh iis atau server lain.

Akash
sumber
Ini ditanyakan dan dijawab 4 tahun yang lalu dengan jawaban yang sama tetapi lebih baik.
George