এক্সপ্রেসজেএস - ত্রুটিবিহীন ত্রুটি ইভেন্ট নিক্ষেপ


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 এর অর্থ হচ্ছে বন্দরটি ইতিমধ্যে ব্যবহৃত in অ্যাপ্লিকেশন.জেজে ওয়েব সার্ভারটি কোন পোর্ট শোনে বা পরিবর্তন করার চেষ্টা করুন বা আপনার প্রয়োজন না হলে বর্তমানে সেই বন্দরটি যা ব্যবহার করছে তা মেরে ফেলুন।
গো-ওলেগ

বন্ধের বন্দরটি যদি ঠিক করা না থাকে তবে এটি> stackoverflow.com/a/52441297/6665568
নাটেশ ভাট

উত্তর:


400

আপনি 8080 এর মতো একই পোর্ট ব্যবহার করে অন্য একটি সার্ভার চালিয়েছিলেন।

হতে পারে আপনি node appঅন্য শেল চালিয়েছেন, দয়া করে এটি বন্ধ করুন এবং আবার চালান।

আপনি পোর্ট নং পরীক্ষা করতে পারেন। উপলব্ধ বা ব্যবহার না করে

netstat -tulnp | grep <port no>

বিকল্পভাবে, আপনি lsof ব্যবহার করতে পারেন :

lsof -i :<port no>

4
আমি ওয়েবস্টোরম ব্যবহার করে এটিতে ছুটে এসেছি। একই ওয়ার্কস্পেসে আমার দুটি ডিবাগ সেশন খোলা ছিল। ডোহ!
নিক কারান

53
এই ধরনের একটি সাধারণ ত্রুটি সত্যিই আরও ভাল ত্রুটির বার্তার দাবিদার।
টমলিন

নোড-অ্যাক্টিভেটরেক্টরি ব্যবহার করার সময় আমার সাথে এটি ঘটেছিল। আমার বেসডিএন সাবডোমেনটি অনুপস্থিত। baseDN: 'LDAP: // ডিসি = সাবডোমেন, DC = ডোমেন, ডিসি = কম'
মার্ক

একটি দৃষ্টান্ত চালাচ্ছিল rails server...: |
শেহেরিয়ার

1
ম্যাক হাই সিয়েরাতে: lsof -nP -i4TCP: OR পোর্ট | , grep শুনুন
Roee

60

আমরা কখনও কখনও আমাদের এক্সপ্রেস অ্যাপ্লিকেশন চালালে আমরাও তেমনি ত্রুটি পাই। সেক্ষেত্রে আমাদেরও একই অনুসরণ করতে হবে। এটি কোনও টার্মিনালে চলছে কিনা তা আমাদের খতিয়ে দেখা উচিত। আপনি যদি প্রক্রিয়াটি খুঁজে পেতে এবং হত্যা করতে চান তবে এই পদক্ষেপগুলি অনুসরণ করুন:

  • পিএস অক্স | গ্রেপ নোড
  • প্রক্রিয়া আইডি (বাম থেকে দ্বিতীয়) সন্ধান করুন:
  • কিল -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(লিনাক্সে)
jt3k

25

একটি উদাহরণ সম্ভবত এখনও চলছে running এটি এটি ঠিক করবে।

killall node

আপডেট: এই কমান্ডটি কেবল লিনাক্স / উবুন্টু এবং ম্যাকের জন্য কাজ করবে।


1
কিল্লাল -9 নোড
পঙ্কজ শিন্ডে

16

আপনি যদি লিনাক্সে থাকেন তবে নোডেজগুলি রুট হিসাবে চলমান না থাকলে এই সমস্যাও দেখা দিতে পারে।

এটি থেকে পরিবর্তন করুন:

nodejs /path/to/script.js

এটি:

sudo nodejs /path/to/script.js

আমার সাথে সবেমাত্র ঘটেছিল এবং এখানে অন্যান্য পরামর্শগুলির মধ্যে এটির কোনও এটি ঠিক করে নি। ভাগ্যক্রমে আমি মনে করি স্ক্রিপ্টটি অন্য দিনটি যখন রুট হিসাবে চলছিল তখন কাজ করছিল। আশা করি এটি কাউকে সাহায্য করবে!

দাবি অস্বীকার: এটি সম্ভবত উত্পাদন পরিবেশের জন্য সেরা সমাধান নয়। রুট হিসাবে আপনার পরিষেবা শুরু করা আপনার সার্ভার / অ্যাপ্লিকেশনটিতে কিছু সুরক্ষা গর্ত প্রবর্তন করতে পারে। আমার ক্ষেত্রে এটি একটি স্থানীয় পরিষেবাটির সমাধান ছিল তবে আমি অন্যকে কারণকে আলাদা করার জন্য আরও কিছুটা সময় ব্যয় করতে উত্সাহিত করব।


1
এই সমস্যাটি সমাধান করার জন্য স্ক্রিপ্টটিকে মূল হিসাবে চালানো সত্যিই বিপজ্জনক বলে মনে হচ্ছে। আপনি যদি 1024 এর অধীনে কোনও বন্দরের সাথে আবদ্ধ হওয়ার চেষ্টা না করেন, আপনার আর কখনও রুট হিসাবে নোড চালানোর প্রয়োজন হবে না। আমি আপনার ক্ষেত্রে সন্দেহ করি, আপনি 80 বা 443 বন্দরটি আবদ্ধ করার চেষ্টা করছেন I আমি Nginx ব্যবহার করে like০০০ বা অন্য কোনও কিছুর মতো উচ্চতর বন্দরে নোডেজগুলিতে সেই বন্দরগুলি থেকে ট্র্যাফিকের জন্য নির্দেশ করতে চাই।
ভ্যারিকিন

1
যে ইশারা জন্য ধন্যবাদ। আমি মনে করি না যে আমি যে বিশেষ স্ক্রিপ্টটি ব্যবহার করছিলাম সেগুলির মধ্যে যে কোনও একটির জন্য কল করা হয়েছিল, আমি অবশ্যই কোনও নোডকে একটি HTTP সার্ভার হিসাবে ব্যবহার করছি না। সম্ভবত এটি মডিউলগুলির মধ্যে একটি ছিল যা অতিরিক্ত অনুমতি চেয়েছিল? আমি ক্ষমাপ্রার্থী এটি কিছুক্ষণ হয়ে গেছে তাই কোন স্ক্রিপ্ট এই সমাধানটির জন্য ডেকেছে তাও আমি নিশ্চিত নই। আমি একটি উত্পাদন পরিবেশে এটি চেষ্টা সম্পর্কে একটি অস্বীকৃতি যোগ করব।
কারণবিহীন প্রভাব

12

কারণ আপনি যে পোর্টটি স্ক্রিপ্টটি চালাতে ব্যবহার করছেন সেটি ইতিমধ্যে ব্যবহৃত in আপনাকে সেই পোস্টটি ব্যবহার করছে এমন সমস্ত নোড থামাতে হবে। তার জন্য, আপনি সমস্ত নোড দ্বারা পরীক্ষা করতে পারেন

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: // লোকালহোস্ট: 3000 / খুলতে হয়েছিল। প্রক্রিয়াটি সন্ধান করার আরেকটি উপায় এখানে দেওয়া হল ।


2

আপনি যদি একই পোর্ট নম্বরটি ব্যবহার করতে চান kill %তবে টার্মিনালে টাইপ করুন যা বর্তমান পটভূমি প্রক্রিয়াটিকে মেরে ফেলে এবং আরও ব্যবহারের জন্য পোর্টকে মুক্ত করে।



1

চলমান যে কোনও নোড সার্ভারগুলি বন্ধ করুন, সেগুলি অন্য টার্মিনাল উইন্ডোতে থাকলেও বা বিভিন্ন পোর্টে চলছে। যে সমস্যাটি সমাধানের উচিত।


1

যদি আপনি 3000 (এক্সপ্রেস কঙ্কাল সেটআপ দ্বারা ব্যবহৃত ডিফল্ট) কোনও লাভ না করে সমস্ত নোড দৃষ্টান্ত এবং অন্যান্য পরিষেবাগুলি হত্যার চেষ্টা করে থাকেন তবে আপনার পরিবেশটি 'বন্দর' কে অপ্রত্যাশিত কিছু হিসাবে সংজ্ঞায়িত করছে না তা নিশ্চিত করার জন্য আপনাকে পরীক্ষা করা উচিত। অন্যথায়, আপনি সম্ভবত একই ত্রুটি পাবেন। এক্সপ্রেস কঙ্কালের অ্যাপ.জেএস ফাইলটিতে আপনি লাইন 15 টি লক্ষ্য করবেন:

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

1

এটি ঠিক করার জন্য, আপনি যে সার্ভারটি চালাচ্ছেন তা বন্ধ বা বন্ধ করুন। আপনি যদি Eclipse IDE ব্যবহার করে থাকেন তবে এটি অনুসরণ করুন,

চালান> ডিবাগ করুন

এখানে চিত্র বর্ণনা লিখুন

চলমান প্রক্রিয়াটিতে রাইট-ক্লিক করুন এবং টার্মিনেটে ক্লিক করুন ।


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 কীগুলি নোড প্রক্রিয়া দ্বারা ব্যবহৃত পোর্টটি প্রকাশ করে না। সুতরাং এই ত্রুটি আছে। সমস্যার সমাধানটি সার্ভার.জেজে নিম্নলিখিত কোড স্নিপেট ব্যবহার করছিল:

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

এটি আমার পক্ষে কাজ করেছে।

নোডজেএস-এ গ্রেসফুল শাটডাউন- এ উল্লিখিত অন্যান্য সমাধানগুলিও পরীক্ষা করতে পারেন


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)

  • আউটপুট থেকে পিআইডি (প্রক্রিয়া আইডি) অনুলিপি করুন

  • চালান sudo kill -9 16615(আপনাকে পিআইডি লাগাতে হবে -9-এর পরে)

  • আবার সার্ভার শুরু করুন

0

আমার ক্ষেত্রে আমাকেও দৌড়াতে vagrant reloadহয়েছিল। এমনকি আমার ভার্চুয়াল মেশিনে আমার এক্সপ্রেস অ্যাপ চালাবার কোনও নোড প্রক্রিয়া না করেও আমি এখনও ভিজ্যর্ট বাক্সটি পুনরায় লোড না করা পর্যন্ত এই ত্রুটিটি পাচ্ছিলাম।


0

যে পোর্টটি ব্যবহার করছে সে পরিষেবা বন্ধ করুন।

sudo service NAMEOFSERVICE stop

0

আমার ক্ষেত্রে সমস্যাটি next()একটি এক্সপ্রেস `ব্যবহার 'পদ্ধতি কলটিতে কল করতে ভুলে গিয়েছিল ।

যদি বর্তমান মিডলওয়্যারটি অনুরোধ-প্রতিক্রিয়া চক্রটি শেষ না করে, তবে পরবর্তী মিডলওয়্যারের কাছে নিয়ন্ত্রণের জন্য এটি অবশ্যই পরবর্তী () কল করতে হবে, অন্যথায় অনুরোধটি ঝুলিয়ে রাখা হবে left

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

আমারও একই সমস্যা ছিল এবং আমি জানতে পেরেছিলাম যে একটি নোডেজ প্রক্রিয়া যা আমি আগে সিটিআরএল + সি দিয়ে বাতিল করেছিলাম এখনও চলছে running উইন্ডোজ 10-এ সমস্যাটি হ'ল, যে সিটিআরএল + সি গ্রেসফুলি নোডজেসকে হত্যা করে না । আমি টাস্ক ম্যানেজারটি খুললাম এবং প্রক্রিয়াটি ম্যানুয়ালি মেরে ফেলেছি। গিটহাবের প্রদত্ত সমাধানগুলি আমার পক্ষে কার্যকর হয়নি।


0

আপনি যদি উইন্ডোজ ব্যবহার করেন, তবে আপনি নোড.জেএস এর জন্য টাস্ক ম্যানেজার থেকে প্রক্রিয়া শেষ করতে পারেন


0

উত্তরগুলির কোনওটিই আমার পক্ষে কার্যকর হয়নি।

আমি যখন কম্পিউটারটি পুনরায় চালু করলাম তখন আমি সার্ভারটি আপ এবং চলমান পেতে পারি।

ম্যাক
shutdown now -r

লিনাক্স
sudo shutdown now -r


0

-> 8080 বন্দরে কী চলছে বা আপনি কোন পোর্টটি চেক করতে চান তা পরীক্ষা করুন

lsof -i @localhost:8080

যদি কিছু চলমান থাকে তবে আপনি এটি বন্ধ করতে পারেন বা এটি বন্ধ করতে কিছু কমান্ড আদেশ ব্যবহার করতে পারেন


0

ভিজ্যুয়াল স্টুডিও কোডে কেবল সহজভাবে আপনার টেমিনালটি পরীক্ষা করুন কারণ আমি আমার নোড অ্যাপটি চালাচ্ছিলাম এবং আমি আমার ল্যাপটপটি হাইবারনেট করি তার পরের দিন সকালে আমি আমার ল্যাপটপটি সফ্টওয়্যার বিকাশে ফিরিয়ে আনি। আমি আবার কমান্ড নোডেমন অ্যাপ্লিকেশন চালাচ্ছি। প্রথম ওয়াজ রাত থেকে চলছে এবং দ্বিতীয়টি আমার সর্বশেষতম কমান্ডটি চালাচ্ছিল যাতে দুটি কমান্ড প্রম্পট একই পোর্ট শুনতে পাচ্ছে তাই আপনি এই সমস্যাটি পাচ্ছেন। সরল একটি টার্মিয়ানাল বা সমস্ত টার্মিনাল বন্ধ করুন তারপরে আপনার নোড অ্যাপ.জেএস বা নোডমন অ্যাপ.জেএস চালান


0

আপনি যে পোর্টটি শুনছেন সেটি ইতিমধ্যে অন্য একটি প্রক্রিয়া শুনে আসছে।

আমি যখন এই ত্রুটির মুখোমুখি হয়েছি তখন আমি উইন্ডোজ পাওয়ারশেল ব্যবহার করে প্রক্রিয়াটি মেরে ফেলেছিলাম (কারণ আমি উইন্ডোজ ব্যবহার করেছি)

  1. উইন্ডোজ পাওয়ারশেলের আইটেমপেনটি তালিকাভুক্ত করুন
  2. আদর্শ ps এবং তারপরে আপনি প্রক্রিয়াগুলির তালিকা পেতে পারেন
  3. নোড নামের প্রক্রিয়াটি সন্ধান করুন এবং আইডি নোট করুন
  4. টাইপ Stop-process <Id> আমি মনে করি এটি উইন্ডোজ ব্যবহারকারীদের জন্য সহায়তা

0

আমি আজ একই ইস্যুতে দৌড়েছি এবং বন্দরটি ব্যবহার করা হয়নি। নিম্নলিখিত পদ্ধতির সাহায্য করেছে:

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

0

যদি এটি ম্যাক হয় তবে এটি সমস্ত x86_64-আপেল-ডারউইন 13.4.0 এর আইপি। আপনি যদি ত্রুটিগুলি অনুসরণ করেন তবে এটি x86_64-আপেল-ডারউইন 13.4.0 এর সাথে সম্পর্কিত। যোগ

127.0.0.1 x86_64-আপেল-ডারউইন 13.4.0

থেকে , / etc / হোস্ট ফাইল। তারপরে সমস্যা চলে যায়


-1

কেবল আপনার বন্দর পরিবর্তন করুন, আপনার বর্তমান বন্দরটি আইআইএস বা অন্য কোনও সার্ভারের ব্যবহৃত হতে পারে।


এটি জিজ্ঞাসা করা হয়েছিল এবং 4 বছর আগে একই কিন্তু আরও ভাল উত্তর দিয়ে উত্তর দেওয়া হয়েছিল।
জর্জ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.