عند تشغيل خادم Node.js قد يظهر:
Error: listen EADDRINUSE: address already in use :::3000
معناه أن المنفذ مشغول بالفعل. إليك الحلّ على كل نظام.
لماذا يحدث؟
غالبًا تركتَ نسخةً سابقة من الخادم تعمل في الخلفية (لم تُغلق بشكل صحيح)، فلمّا شغّلت من جديد وجد المنفذ 3000 محجوزًا.
الحلّ على لينكس / ماك
ابحث عن العملية ثم أوقفها:
lsof -i :3000 # يعرض الـ PID
kill -9 <PID> # أوقف العملية
أو في أمر واحد:
kill -9 $(lsof -t -i :3000)
الحلّ على ويندوز
netstat -ano | findstr :3000 # العمود الأخير هو الـ PID
taskkill /PID <PID> /F
حلّ بديل: استخدم منفذًا آخر
بدّل المنفذ بسرعة عبر متغيّر بيئة:
PORT=3001 npm run dev
وقاية: إغلاق سليم (Graceful Shutdown)
اجعل الخادم يحرّر المنفذ عند الإيقاف:
const server = app.listen(3000);
process.on("SIGINT", () => server.close(() => process.exit(0)));
جدول سريع
| النظام | الأمر |
|---|---|
| لينكس/ماك | kill -9 $(lsof -t -i :3000) |
| ويندوز | netstat -ano | findstr :3000 ثم taskkill /PID <PID> /F |
| تجاوز سريع | PORT=3001 npm run dev |
الخلاصة
EADDRINUSE يعني ببساطة أن المنفذ محجوز. أوقف العملية القديمة أو غيّر المنفذ،
واعتد إغلاق الخادم بـ Ctrl+C قبل إعادة التشغيل.