تعرّف على كيفية تحديد المنفذ (Port) الدقيق الذي يستخدمه Mongoose للاتصال بـ MongoDB — سواء في بيئة التطوير المحلية، أو بيئات الإنتاج، أو إعدادات السحابة — ولماذا تُعد هذه المعرفة ضرورية لتصحيح الأخطاء وتوسيع تطبيقات Node.js الخاصة بك.
عندما يتصل تطبيق Node.js بقاعدة بيانات MongoDB عبر Mongoose، يعتمد كل شيء على سلسلة الاتصال (Connection String). ولكن عند فشل الاتصال وظهور أخطاء مثل
ECONNREFUSED أو buffering timed out،
فإن أحد أكثر الأسباب التي يتم تجاهلها هو استخدام منفذ خاطئ أو غير متاح.
فهم كيفية العثور على منفذ MongoDB والتحقق منه يمكن أن يوفر على المطورين ساعات طويلة من وقت تصحيح الأخطاء. يعلّمك هذا الدرس كيفية التأكد من المنفذ الذي تستخدمه نسخة MongoDB لديك، وكيف يتفاعل Mongoose مع هذا المنفذ، وكيفية معالجة مشاكل الاتصال بشكل فعّال.
افتراضيًا، تعمل MongoDB على المنفذ 27017. إذا لم تقم بتغيير إعدادات قاعدة البيانات، فهذا هو المنفذ الذي سيستخدمه Mongoose تلقائيًا عند الاتصال عبر:
mongoose.connect('mongodb://localhost:27017/mydatabase');
ومع ذلك، في بيئات الإنتاج أو إعدادات Docker، قد يختلف هذا المنفذ. على سبيل المثال، قد تقوم حاوية MongoDB بتعريض المنفذ 27018 لتجنب التعارض، أو قد تتولى خدمة مُدارة مثل MongoDB Atlas إدارة المنافذ داخليًا.
أول وأسهل طريقة لتأكيد المنفذ هي فحص عنوان الاتصال (URI). انظر إلى إعداد الاتصال في الكود:
mongoose.connect('mongodb://127.0.0.1:27018/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true
});
في هذا المثال، يتصل Mongoose عبر المنفذ 27018. تأكد دائمًا من أن هذا المنفذ يطابق إعدادات MongoDB لديك، وإلا سيفشل الاتصال.
تخزّن MongoDB إعداداتها في ملف يُسمى mongod.conf. يمكنك العثور على هذا الملف في مسارات مثل:
/etc/mongod.conf على LinuxC:\\Program Files\\MongoDB\\Server\\x.x\\bin\\mongod.cfg على Windowsداخل هذا الملف، ابحث عن القسم التالي:
net:
port: 27017
bindIp: 127.0.0.1
إذا قمت بتغيير هذا المنفذ يدويًا، فيجب تحديث عنوان الاتصال في Mongoose بما يتوافق معه. عدم التوافق بين ملف الإعدادات وسلسلة الاتصال يُعد سببًا شائعًا لفشل الاتصال.
إذا لم تتمكن من العثور على ملف الإعدادات أو الوصول إليه، يمكنك استخدام سطر الأوامر لمعرفة المنفذ الذي تستخدمه MongoDB:
ps aux | grep mongod
يعرض هذا الأمر جميع عمليات MongoDB التي تعمل على جهازك، وغالبًا ما يتضمن الإخراج الخيار --port الذي يوضح المنفذ المستخدم.
بديلًا عن ذلك، يمكنك استخدام:
netstat -tulnp | grep mongo
يعرض هذا الأمر الاتصالات الشبكية النشطة، ويمكن أن يساعد في تأكيد منفذ استماع MongoDB، خاصة إذا كنت تشك في وجود مشكلة جدار ناري أو شبكة.
إذا كان تطبيقك يتصل بـ MongoDB Atlas أو DigitalOcean أو AWS، فلن تحتاج غالبًا إلى تحديد المنفذ يدويًا. بدلاً من ذلك، ستكون سلسلة الاتصال على النحو التالي:
mongoose.connect('mongodb+srv://user:password@cluster.mongodb.net/mydatabase');
يقوم بروتوكول mongodb+srv بمعالجة اكتشاف المنفذ تلقائيًا عبر DNS. لا يزال بإمكانك تصحيح مشاكل الاتصال من خلال التأكد من إضافة عنوان IP الخاص بك إلى القائمة المسموح بها في إعدادات الوصول للشبكة.
أما بالنسبة لمستخدمي Docker، فيجب دائمًا التحقق من ملف docker-compose.yml أو إعدادات الحاوية:
services:
mongodb:
image: mongo
ports:
- "27018:27017"
هنا، يتم ربط المنفذ الداخلي لـ MongoDB (27017) بمنفذ خارجي (27018). في هذه الحالة، يجب أن يتصل Mongoose باستخدام
mongodb://localhost:27018.
العديد من الشركات الناشئة وفرق التقنية تهدر ساعات من وقت التطوير بسبب أخطاء بسيطة في المنافذ. على سبيل المثال:
27017، مما سبب تعارضًا في المنافذ. كان الحل هو تغيير المنفذ الخارجي إلى 27018.توضح هذه الأمثلة أن معرفة كيفية التحقق من منفذ MongoDB ليست مجرد معلومة تقنية، بل عنصر أساسي للحفاظ على استقرار أنظمة الإنتاج.
mongod.conf أو docker-compose.yml لإعدادات المنافذ.ps aux أو netstat لمعرفة المنفذ المستخدم فعليًا.بتطبيق هذه الخطوات، يمكن للمطورين حل أحد أكثر أسباب مشاكل الاتصال بـ Mongoose شيوعًا، والحفاظ على اتصال مستقر وموثوق بقاعدة البيانات.
