एक्सप्रेसजेएस - अनहेल्ड एरर इवेंट को फेंक दें


180

मैंने निम्नलिखित आदेशों का उपयोग करते हुए एक्सप्रेसज एप्लिकेशन बनाया:

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

जब मैं एप्लिकेशन को इसके साथ चलाता हूं: node app.jsमेरे पास निम्नलिखित त्रुटियां हैं:

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)

इसे कैसे जोड़ेंगे?


30
EADDRINUSE का अर्थ है कि पोर्ट पहले से उपयोग में है। बदलने की कोशिश करें कि ऐप में वेब सर्वर को किस पोर्ट पर रखा जाए। अगर जरूरत न हो तो उस पोर्ट का उपयोग करें।
गो-ओलेग

यदि पोर्ट बंद नहीं हो रहा है, तो इसे आज़माएं> stackoverflow.com/a/52441297/6665568
Natesh bhat

जवाबों:


400

आपने 8080 की तरह ही एक अन्य सर्वर का उपयोग किया था।

हो सकता है कि आप node appदूसरे शेल में चले गए थे , कृपया इसे बंद करें और फिर से चलाएं।

आप PORT no देख सकते हैं। उपलब्ध है या उपयोग नहीं कर रहा है

netstat -tulnp | grep <port no>

वैकल्पिक रूप से, आप lsof का उपयोग कर सकते हैं :

lsof -i :<port no>

4
मैं WebStorm का उपयोग कर इस में भाग गया। मेरे पास एक ही कार्यक्षेत्र में दो डिबग सत्र खुले थे। रवींद्र!
निक कुरेन

53
इस तरह की सामान्य त्रुटि वास्तव में एक बेहतर त्रुटि संदेश की हकदार है।
टामलिन जूल

नोड-एक्टीडायरेक्ट्री का उपयोग करते समय मेरे साथ ऐसा हुआ। मेरा बेसडीएन उपडोमेन गायब था। baseDN: 'ldap: // dc = subdomain, dc = domain, dc = com'
मार्क

का एक उदाहरण चला रहा था rails server...: |
शेहरार

1
ऑन मैक हाई सिएरा: lsof -nP -i4TCP: $ PORT | grep LISTEN
Roee

60

जब हम कभी-कभी अपना एक्सप्रेस ऐप चलाते हैं तो हमें भी ऐसी ही त्रुटि मिलती है। हमें उस मामले में उसी का पालन करना होगा। हमें यह जाँचने की आवश्यकता है कि क्या किसी टर्मिनल में चल रहा है। यदि आप प्रक्रिया को खोजना और मारना चाहते हैं, तो इन चरणों का पालन करें:

  • ps aux | ग्रीप नोड
  • प्रक्रिया आईडी ढूंढें (बाएं से दूसरा):
  • किल -9 PRCOCESS_ID

या

सभी चल रहे नोड प्रक्रियाओं को बंद करने के लिए एकल कमांड का उपयोग करें।

ps aux | awk '/node/{print $2}' | xargs kill -9

5
ps aux | grep node | awk '{print $2}' | xargs kill -9
डेनियल

killall -r node(linux में)
jt3k

25

एक उदाहरण शायद अभी भी चल रहा है। इसे ठीक कर देंगे।

killall node

अपडेट: यह कमांड केवल लिनक्स / उबंटू और मैक पर काम करेगा।


1
किल -9 नोड
पंकज शिंदे

16

यदि आप लिनक्स पर हैं, तो यह समस्या तब भी हो सकती है जब नोड्स रूट के रूप में नहीं चल रहे हों।

इससे बदलें:

nodejs /path/to/script.js

इसके लिए:

sudo nodejs /path/to/script.js

बस मेरे साथ हुआ और अन्य सुझावों में से किसी ने भी इसे तय नहीं किया। सौभाग्य से मुझे याद आया कि स्क्रिप्ट रूट के रूप में चलने के दूसरे दिन काम कर रही थी। आशा है कि यह किसी की मदद करता है!

अस्वीकरण: यह शायद उत्पादन वातावरण के लिए सबसे अच्छा समाधान नहीं है। रूट के रूप में अपनी सेवा शुरू करने से आपके सर्वर / एप्लिकेशन को कुछ सुरक्षा छेद मिल सकते हैं। मेरे मामले में, यह एक स्थानीय सेवा के लिए एक समाधान था, लेकिन मैं दूसरों को इस कारण को अलग करने के लिए कुछ और समय बिताने के लिए प्रोत्साहित करूंगा।


1
इस मुद्दे को हल करने के लिए स्क्रिप्ट को रूट के रूप में चलाने के लिए वास्तव में खतरनाक लगता है। जब तक आप 1024 के तहत एक बंदरगाह से बांधने की कोशिश कर रहे हैं, आपको नोड को रूट के रूप में चलाने की आवश्यकता नहीं होनी चाहिए। मुझे आपके मामले में संदेह है, आप 80 या 443 को पोर्ट करने के लिए बाध्य करने की कोशिश कर रहे हैं। मैं नगनेक्स का उपयोग करने के लिए उन बंदरगाहों से सीधे यातायात के लिए एक उच्च बंदरगाह पर 8000 या कुछ की तरह उपयोग करने का सुझाव दूंगा।
वरीकिन

1
यह बात बताने के लिए धन्यवाद। मुझे नहीं लगता है कि मैं जिस विशेष स्क्रिप्ट का उपयोग कर रहा था, उनमें से किसी भी पोर्ट के लिए कॉल किया गया था, मैं निश्चित रूप से नोड को http सर्वर के रूप में उपयोग नहीं कर रहा हूं। शायद यह उन मॉड्यूलों में से एक था जिसका मैंने उपयोग किया था जो अतिरिक्त अनुमतियों के लिए कहा जाता था? मैं माफी माँगता हूँ कि यह एक समय हो गया है इसलिए मुझे यह भी पता नहीं है कि इस समाधान के लिए किस स्क्रिप्ट ने कॉल किया। मैं एक उत्पादन वातावरण में यह प्रयास करने के बारे में एक अस्वीकरण जोड़ूंगा।
CauselessEffect

12

ऐसा इसलिए है क्योंकि स्क्रिप्ट को चलाने के लिए आप जिस पोर्ट का उपयोग कर रहे हैं, वह पहले से ही उपयोग में है। आपको अन्य सभी नोड्स को रोकना होगा जो उस पोस्ट का उपयोग कर रहे हैं। उसके लिए, आप सभी नोड की जाँच कर सकते हैं

ps -e

या केवल नोड प्रक्रिया के लिए उपयोग करें ps -ef | grep node यह आपको आईडी के साथ सभी नोड प्रक्रिया की सूची देगा

सभी नोड प्रक्रिया को मारने के लिए

sudo killall -9 node

या विशिष्ट आईडी के लिए sudo kill -9 id


आपने मेरा नाइट बचाया!
मुजतबा महमूद

8

मैंने बंदरगाह को बदलकर बग को तय किया जो था

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

और इसे बदल दिया गया:

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

1
यह कैसे लागू होता है जो मार्क द्वारा दिए गए उत्तर को स्वीकार किए गए उत्तर को लागू करने से अलग है।
EWit

3

पोर्ट नोड का उपयोग करने की कोशिश कर रहा है पहले से ही किसी अन्य प्रोग्राम द्वारा उपयोग किया जा सकता है। मेरे मामले में यह शून्य था , जिसे मैंने हाल ही में स्थापित किया था। मुझे इसे महसूस करने के लिए http: // localhost: 3000 / / एक ब्राउज़र में खोलना पड़ा । प्रक्रिया खोजने का एक और तरीका यहां दिया गया है


2

यदि आप उसी पोर्ट नंबर का उपयोग करना चाहते हैं तो kill %टर्मिनल में टाइप करें , जो वर्तमान पृष्ठभूमि प्रक्रिया को मारता है और आगे के उपयोग के लिए पोर्ट को मुक्त करता है।



1

किसी भी अन्य नोड सर्वर को बंद करें जो चल रहे हैं, भले ही वे अन्य टर्मिनल विंडो में हों या विभिन्न बंदरगाहों पर चल रहे हों। इससे समस्या का हल निकलना चाहिए।


1

यदि आपने सभी नोड इंस्टेंस और अन्य सेवाओं को 3000 तक सुनने की कोशिश की है (एक्सप्रेस कंकाल सेटअप द्वारा उपयोग किया गया डिफ़ॉल्ट), तो आपको यह सुनिश्चित करने के लिए जांचना चाहिए कि आपका वातावरण कुछ अप्रत्याशित होने के लिए 'पोर्ट' को परिभाषित नहीं कर रहा है। अन्यथा, आपको संभवतः वही त्रुटि मिलेगी। एक्सप्रेस कंकाल के app.js फ़ाइल में आप लाइन 15 को नोटिस करेंगे:

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

1

इसे ठीक करने के लिए, आपके द्वारा चलाए जा रहे सर्वर को समाप्त या बंद करें। यदि आप ग्रहण आईडीई का उपयोग कर रहे हैं, तो इसका पालन करें,

भागो> डिबग

यहां छवि विवरण दर्ज करें

रनिंग प्रक्रिया पर राइट-क्लिक करें और टर्मिनेट पर क्लिक करें ।


1

घटनाओं .js: 183 फेंक एर; // अनहेल्दी 'त्रुटि' घटना

मुझे भी इसी तरह की समस्या हुई और कई तरह की कोशिश की गई, लेकिन आखिरकार यह मिल गया, यह अच्छी तरह से काम करता है:

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

अधिक स्पष्टीकरण के लिए इस लिंक का संदर्भ लें https://github.com/ionic-team/ionic-cli/issues/2922


1

वास्तव में Ctrl + C कुंजियाँ नोड प्रक्रिया द्वारा उपयोग किए जाने वाले पोर्ट को जारी नहीं करती हैं। तो यह त्रुटि है। समस्या का समाधान Server.js में निम्नलिखित कोड स्निपेट का उपयोग कर रहा था:

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

इसने मेरे लिए काम किया।

आप NodeJS में ग्रेसफुल शटडाउन में उल्लिखित अन्य समाधानों के लिए भी जांच कर सकते हैं


1

इस त्रुटि का कारण

आपके द्वारा निर्दिष्ट पोर्ट पर कुछ अन्य प्रक्रिया पहले से ही चल रही है

सरल और त्वरित समाधान

लिनक्स ओएस पर, उदाहरण के लिए आपने पोर्ट के रूप में 3000 निर्दिष्ट किया है

  • टर्मिनल खोलें और चलाएं lsof -i :3000। यदि कोई प्रक्रिया पहले से ही पोर्ट 3000 पर चल रही है तो आपको यह प्रिंटिंग कंसोल पर दिखाई देगी

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

  • आउटपुट से PID (प्रक्रिया ID) की प्रतिलिपि बनाएँ

  • भागो sudo kill -9 16615(आपको -9 के बाद PID लगाना होगा)

  • सर्वर फिर से शुरू करें

0

मेरे मामले में मुझे भी भागना पड़ा है vagrant reload। यहां तक ​​कि मेरी वर्चुअल मशीन में अपने एक्सप्रेस ऐप को चलाने के लिए कोई नोड प्रक्रिया नहीं होने के बावजूद मुझे योनि बॉक्स को फिर से लोड करने तक यह त्रुटि मिल रही थी।


0

उस पोर्ट का उपयोग करने वाली सेवा को बंद करें।

sudo service NAMEOFSERVICE stop

0

मेरे मामले में समस्या next()व्यक्त करने के लिए एक व्यक्त 'उपयोग' विधि कॉल में भूल के कारण था ।

यदि वर्तमान मिडलवेयर अनुरोध-प्रतिक्रिया चक्र को समाप्त नहीं करता है, तो उसे अगले मिडलवेयर पर नियंत्रण पास करने के लिए अगला () कॉल करना होगा, अन्यथा अनुरोध लटका हुआ रहेगा।

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




0

एक ही प्रक्रिया को कई बार मारने और यह पता लगाने में सक्षम नहीं होने के बाद कि पोर्ट 8000 पर और क्या चल रहा है, मुझे एहसास हुआ कि मैं 8000 साल से अधिक दौड़ने की कोशिश कर रहा था:

इससे पहले:

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);
});

उपरांत:

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, {});

0

मुझे एक ही समस्या थी और मुझे पता चला, कि नोडज प्रक्रिया जो मैंने पहले CTRL + C के साथ रद्द कर दी थी, अभी भी चल रही है। विंडोज 10 में समस्या यह है, कि Ctrl + C ग्रेसफुल नोडज को नहीं मारता है । मैंने कार्य प्रबंधक को खोला और प्रक्रिया को मैन्युअल रूप से मार दिया। GitHub पर प्रदान किए गए समाधान मेरे लिए काम नहीं करते हैं।


0

यदि आप विंडोज़ का उपयोग करते हैं, तो आप नोड.जेएस के लिए कार्य प्रबंधक से प्रक्रिया समाप्त कर सकते हैं


0

मेरे किसी भी जवाब ने काम नहीं किया।

जब मैंने अपना कंप्यूटर फिर से शुरू किया तो मैं सर्वर को चालू कर सका।

मैक
shutdown now -r

लिनक्स
sudo shutdown now -r


0

-> पोर्ट 8080 पर क्या चल रहा है या क्या आप कभी भी चेक करना चाहते हैं

lsof -i @localhost:8080

अगर कुछ चल रहा है तो आप इसे बंद कर सकते हैं या इसे बंद करने के लिए कुछ किल कमांड का उपयोग कर सकते हैं


0

सिंपल सिर्फ विजुअल स्टूडियो कोड में अपने टेम्पिनल की जांच करें क्योंकि मैं अपना नोड ऐप चला रहा था और मैं अपने लैपटॉप को हाइबरनेट करता हूं, फिर अगली सुबह मैं अपने लैपटॉप को सॉफ्टवेयर के विकास में बदल देता हूं। फिर से मैं फिर से कमांड नोडम ऐप चलाता हूं। पहला फर्स्ट वास रात से चल रहा है और दूसरा मेरा लेटेस्ट कमांड चल रहा है इसलिए दो कमांड प्रॉम्प्ट एक ही पोर्ट को सुन रहे हैं इसलिए आपको यह इश्यू मिल रहा है। सरल एक टर्मिनल या सभी टर्मिनल को बंद करें और फिर अपना नोड ऐप चलाएं। जेएस या नोडम ऐप। जेएस


0

जिस पोर्ट को आप सुन रहे हैं, वह पहले से ही एक अन्य प्रक्रिया द्वारा सुना जा रहा है।

जब मुझे इस त्रुटि का सामना करना पड़ा तो मैंने Windows PowerShell का उपयोग करके प्रक्रिया को मार दिया (क्योंकि मैंने Windows का उपयोग किया था)

  1. विंडो शक्तियां आइटम आइटम करें
  2. प्रकार psऔर फिर आप प्रक्रियाओं की सूची प्राप्त कर सकते हैं
  3. नोड नाम की प्रक्रिया खोजें , और आईडी नोट करें
  4. प्रकार Stop-process <Id> मुझे लगता है कि यह विंडोज़ उपयोगकर्ताओं के लिए मदद है

0

मैं आज उसी मुद्दे पर भाग गया और बंदरगाह का उपयोग नहीं किया गया था। निम्नलिखित दृष्टिकोण ने मदद की:

rm -rf node_modules && npm cache clean && npm install
npm start

0

यदि यह मैक में है तो यह सभी के बारे में x86_64-apple-darwin13.4.0 का IP है। यदि आप त्रुटियों का पालन करते हैं तो यह x86_64-apple-darwin13.4.0 से संबंधित कुछ होगा। जोड़ना

127.0.0.1 x86_64-apple-darwin13.4.0

करने के लिए / etc / hosts फ़ाइल। तब समस्या दूर हो गई है


-1

बस अपने पोर्ट को बदलें, हो सकता है कि आपका वर्तमान पोर्ट आईस या किसी अन्य सर्वर द्वारा उपयोग में हो।


यह 4 साल पहले उसी से बेहतर उत्तर के साथ पूछा गया था।
जॉर्ज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.