🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

Node.js में पहले से उपयोग में आ रहे EADDRINUSE पोर्ट की त्रुटि को कैसे ठीक करें?

⏱️2 min read  ·  270 words

त्रुटित्रुटि: EADDRINUSE सुनें: पता पहले से ही उपयोग में है :::3000 इसका मतलब है कि कोई अन्य प्रक्रिया पहले से ही उस पोर्ट का उपयोग कर रही है जो आपका Node.js ऐप चाहता है। यह विकास के दौरान सबसे आम त्रुटियों में से एक है। इसे ठीक करने का हर तरीका यहां दिया गया है।

इस त्रुटि का क्या कारण है

  • पिछला सर्वर इंस्टेंस सफाई से बंद नहीं हुआ और अभी भी पोर्ट
  • को बरकरार रखता है एक अन्य एप्लिकेशन उसी पोर्ट (एक अन्य डेव सर्वर, डेटाबेस) का उपयोग कर रहा है
  • एक दुर्घटनाग्रस्त प्रक्रिया ने पोर्ट को पकड़े हुए एक ज़ोंबी को छोड़ दिया
  • आपने अपना सर्वर दो बार शुरू किया

समाधान 1: प्रक्रिया को खोजें और ख़त्म करें (macOS/Linux)

# Find the process using port 3000
lsof -i :3000
# COMMAND   PID  USER   FD   TYPE  DEVICE  NODE NAME
# node    12345  you   20u  IPv6  ...     TCP  *:3000 (LISTEN)

# Kill it by PID
kill -9 12345

# Or do it in one command
kill -9 $(lsof -ti :3000)

# Kill all node processes (nuclear option)
killall -9 node

समाधान 2: प्रक्रिया को ढूंढें और समाप्त करें (विंडोज़)

# Find the process using port 3000
netstat -ano | findstr :3000
# TCP    0.0.0.0:3000    0.0.0.0:0    LISTENING    12345

# Kill it by PID
taskkill /PID 12345 /F

# PowerShell one-liner
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force

समाधान 3: एक भिन्न पोर्ट का उपयोग करें

// Make the port configurable via environment variable
const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
  console.log("Server running on port " + PORT);
});

// Then run with a different port:
// PORT=3001 node server.js

समाधान 4: त्रुटि को शालीनतापूर्वक संभालें

const server = app.listen(PORT);

server.on('error', (err) => {
  if (err.code === 'EADDRINUSE') {
    console.error("Port " + PORT + " busy. Trying " + (PORT + 1));
    server.listen(PORT + 1);  // fall back to next port
  } else {
    throw err;
  }
});

समाधान 5: ग्रेसफुल शटडाउन लागू करें (समस्या को रोकता है)

मूल कारण अक्सर एक सर्वर होता है जो बाहर निकलने पर पोर्ट जारी नहीं करता है। सुंदर शटडाउन हैंडलर जोड़ें:

const server = app.listen(PORT, () => {
  console.log("Server running on port " + PORT);
});

function shutdown(signal) {
  console.log(signal + " received. Closing server...");
  server.close(() => {
    console.log("Server closed. Port released.");
    process.exit(0);
  });
  setTimeout(() => {
    console.error("Forced shutdown");
    process.exit(1);
  }, 10000);
}

process.on('SIGTERM', () => shutdown('SIGTERM'));
process.on('SIGINT', () => shutdown('SIGINT'));  // Ctrl+C

फिक्स 6: क्लीन रीस्टार्ट के लिए नोडमॉन का उपयोग करें

npm install --save-dev nodemon

# package.json
{
  "scripts": {
    "dev": "nodemon server.js"
  }
}

# nodemon cleanly restarts and releases ports between reloads
npm run dev

पुन: प्रयोज्य किल-पोर्ट स्क्रिप्ट

# kill-port.sh
#!/bin/bash
PORT=${1:-3000}
PID=$(lsof -ti :$PORT)
if [ -n "$PID" ]; then
  echo "Killing process $PID on port $PORT"
  kill -9 $PID
else
  echo "No process on port $PORT"
fi

# Usage: ./kill-port.sh 3000

अक्सर पूछे जाने वाले प्रश्न

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

प्रश्न: ‘:::3000’ में ::: का क्या मतलब है?
ए: “सभी इंटरफेस” के लिए आईपीवी6 नोटेशन (जैसे आईपीवी4 में 0.0.0.0)। आपका सर्वर पोर्ट 3000 पर सभी नेटवर्क इंटरफेस से जुड़ता है।

प्रश्न: क्या दो ऐप्स एक ही पोर्ट साझा कर सकते हैं?
उत्तर: नहीं – एक समय में केवल एक ही प्रक्रिया किसी इंटरफ़ेस के पोर्ट से जुड़ सकती है। पथ/डोमेन द्वारा रूट करने के लिए विभिन्न पोर्ट या रिवर्स प्रॉक्सी (nginx) का उपयोग करें।

प्रश्न: मैं डॉकर में इससे कैसे बचूँ?
उ: प्रत्येक कंटेनर का अपना नेटवर्क नेमस्पेस होता है, इसलिए टकराव केवल होस्ट मैपिंग पर होता है। विभिन्न होस्ट पोर्ट मैप करें:-p 3001:3000.

प्रश्न: क्या किलॉल नोड सुरक्षित है?
उ: यह सभी Node.js प्रक्रियाओं को ख़त्म कर देता है – विकास में ठीक है, लेकिन सावधान रहें यदि आपके पास अन्य नोड ऐप्स हैं जिन्हें आप रोकना नहीं चाहते हैं।

निष्कर्ष

EADDRINUSE का मतलब है कि पोर्ट पहले ही ले लिया गया है। त्वरित समाधान: के साथ प्रक्रिया खोजें और इसे मार डालोlsof -ti :PORT. स्थायी समाधान:सुंदर शटडाउन हैंडलर जोड़ें इसलिए आपका सर्वर हमेशा बाहर निकलने पर पोर्ट जारी करता है, औरका उपयोग करता है स्वच्छ पुनरारंभ के लिए विकास में।nodemonके माध्यम से पोर्ट को कॉन्फ़िगर करने योग्य बनाना झगड़ों को भी तुरंत दूर कर देता है।process.env.PORTके माध्यम से पोर्ट को कॉन्फ़िगर करने योग्य बनाना झगड़ों को भी तुरंत दूर कर देता है।

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা