त्रुटित्रुटि: EADDRINUSE सुनें: पता पहले से ही उपयोग में है :::3000 इसका मतलब है कि कोई अन्य प्रक्रिया पहले से ही उस पोर्ट का उपयोग कर रही है जो आपका Node.js ऐप चाहता है। यह विकास के दौरान सबसे आम त्रुटियों में से एक है। इसे ठीक करने का हर तरीका यहां दिया गया है।
📋 Table of Contents
- इस त्रुटि का क्या कारण है
- समाधान 1: प्रक्रिया को खोजें और ख़त्म करें (macOS/Linux)
- समाधान 2: प्रक्रिया को ढूंढें और समाप्त करें (विंडोज़)
- समाधान 3: एक भिन्न पोर्ट का उपयोग करें
- समाधान 4: त्रुटि को शालीनतापूर्वक संभालें
- समाधान 5: ग्रेसफुल शटडाउन लागू करें (समस्या को रोकता है)
- फिक्स 6: क्लीन रीस्टार्ट के लिए नोडमॉन का उपयोग करें
- पुन: प्रयोज्य किल-पोर्ट स्क्रिप्ट
- अक्सर पूछे जाने वाले प्रश्न
- निष्कर्ष
इस त्रुटि का क्या कारण है
- पिछला सर्वर इंस्टेंस सफाई से बंद नहीं हुआ और अभी भी पोर्ट
- को बरकरार रखता है एक अन्य एप्लिकेशन उसी पोर्ट (एक अन्य डेव सर्वर, डेटाबेस) का उपयोग कर रहा है
- एक दुर्घटनाग्रस्त प्रक्रिया ने पोर्ट को पकड़े हुए एक ज़ोंबी को छोड़ दिया
- आपने अपना सर्वर दो बार शुरू किया
समाधान 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के माध्यम से पोर्ट को कॉन्फ़िगर करने योग्य बनाना झगड़ों को भी तुरंत दूर कर देता है।
🔗 Share this article
✍️ Leave a Comment