تخطَّ إلى المحتوى

٣٠ يونيو ٢٠٢٦

حل خطأ EADDRINUSE: port already in use بالعربي

عند تشغيل خادم 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 قبل إعادة التشغيل.

تعلّم بناء الخوادم مع Node.js.

الأسئلة الشائعة

ماذا يعني EADDRINUSE؟

يعني أن المنفذ (مثل 3000) الذي يحاول تطبيقك استخدامه مشغول بالفعل بعملية أخرى — غالبًا نسخة سابقة من نفس الخادم لم تُغلق.

كيف أوقف العملية التي تشغل المنفذ؟

ابحث عن رقم العملية (PID) المرتبط بالمنفذ ثم أوقفها: على لينكس/ماك بـ lsof و kill، وعلى ويندوز بـ netstat و taskkill.

كيف أتجنّب هذا الخطأ؟

أغلق الخادم بشكل صحيح (Ctrl+C) قبل تشغيله من جديد، أو استخدم منفذًا مختلفًا، أو اضبط الكود لإغلاق المنفذ عند الإيقاف (graceful shutdown).

اقرأ أيضًا

تصفّح كل المقالات في المدوّنة، أو ابدأ التعلّم من المسارات و خرائط الطريق.