MongoDB / المتوسط: التجميع وعقود التطبيق / الدرس 11
المشغلات والاتصالات وحدود الأمان
استخدم عملاء مدعومين بمجمع محدود وهوية ونقل واضحين، وميز قبول شبكة Atlas عن مصادقة القاعدة وصلاحياتها.
في هذه الصفحة
أهداف الدرس
- شرح مسؤوليات URI وSRV وTLS وauthSource.
- تصميم الإدخال والمجمع والصلاحية دون افتراضات واسعة.
إصدارات الخادم والمشغل والبيئة مستقلة
يحول المشغل القيم لـ BSON ويدير الاختيار والمجمع. يعتمد التوافق على ثلاثة إصدارات لا الاسم. أعد استخدام عميل مدار لا واحداً لكل طلب وفق سلامة البيئة. حد التزامن والمهلة من الحاجة؛ لا ينشئ المجمع الكبير سعة ولا ينبغي أن يولد الفشل عاصفة إعادة بلا حد.
اقرأ URI إعداداً لا حاوية أسرار منشورة
تستخدم URI اسماً مثالياً بلا اعتمادات. ينشئ MongoClient كائن عميل وقد تبدأ العمليات أو connect الشبكة؛ لا ينفذ المقطع. تحتاج SRV سجلات DNS وتفعل +srv TLS افتراضياً ما لم تتجاوز. لا تعطل الشهادات لإخفاء الاسم أو الثقة. خذ الإعداد المعتمد من الأسرار والنشر.
// Node.js driver illustration only; requires a compatible installed driver.
const { MongoClient } = require('mongodb');
const client = new MongoClient('mongodb+srv://cluster.example.test/quay_lab', {
maxPoolSize: 10, serverSelectionTimeoutMS: 5000
});
// No connect() or database operation is executed in this illustration.
العشرة والخمس ثوانٍ قيم تعليمية لا توصيات عامة ولا نورد أسراراً أو خدمة قابلة للحل.
قبول الشبكة ليس دور قاعدة
تشمل Atlas الشبكة ومستخدمي القاعدة، ولا يصبح حساب المشروع هوية المشغل تلقائياً. يحتاج الذاتي إعداد مصادقة ومنح وTLS مراجعاً. تحدد authSource موضع المصادقة لا قاعدة التطبيق بالضرورة. تحدد الأدوار العمليات، وافصل التشغيل والترحيل والمراقبة والنسخ ولا تستخدم الإدارة للطلبات. تختلف الميزات والواجهات بين Community وEnterprise ومستويات Atlas.
تحقق من القيم وارفض المعاملات العشوائية
يبني النمط مرشحاً معروفاً من قيم مفردة لا جسم طلب كامل. الكائن محلي ولا يرسل. لا تعامل {$ne:null} كاسم حساب. ليس ربط مشغل الوثائق ربط SQL، فحدد الحقول والمعاملات والأنواع والمستأجر. لا يعوض الإسقاط والتحقق الصلاحية.
const request = { tenantId: 'training-a', trackingCode: 'PK-101' };
if (typeof request.tenantId !== 'string' || typeof request.trackingCode !== 'string') {
throw new TypeError('scalar strings required');
}
const filter = { tenantId: request.tenantId, trackingCode: request.trackingCode };
printjson(filter);
{ tenantId: "training-a", trackingCode: "PK-101" }
البنية ملك التطبيق وتأتي القيم المتحققة فقط من الطلب.
صنف الفشل قبل الإعادة
قد تعكس مهلة الاختيار DNS أو البنية أو TLS أو الوصول ولا تشخص بطء استعلام وحده. يختلف فشل الهوية والصلاحية. لا تجعل إعادة الكتابة أو callback كل عمل بلا تكرار. احفظ الرموز والعلامات دون أسرار، وأغلق العميل عند إيقاف منظم ونظف المؤشرات والجلسات لا لكل طلب. راجع التوافق عند الترقية.
الأخطاء الشائعة وإصلاحها
MongoServerSelectionError
- لماذا يحدث؟
- لم يُختر خادم مؤهل ضمن المهلة.
- كيف تصلحه؟
- افحص البنية وDNS وTLS والوصول قبل المهلة.
- كيف تتجنب تكراره؟
- اختبر بيئة العميل وحد الإعادة.
Authentication failed (18)
- لماذا يحدث؟
- لا تتطابق الاعتمادات أو الآلية أو authSource.
- كيف تصلحه؟
- راجع التجهيز دون إضعاف TLS أو توسيع الأدوار.
- كيف تتجنب تكراره؟
- افصل حساب Atlas ومستخدم القاعدة.
يغير كائن الطلب معنى البحث
- لماذا يحدث؟
- قبلت معاملات غير موثوقة كبنية.
- كيف تصلحه؟
- حدد البنية وتحقق من القيم المفردة.
- كيف تتجنب تكراره؟
- اختبر حقن الكائن وحفظ المستأجر.
اختبر فهمك
1. هل يثبت دخول واجهة Atlas صحة كلمة القاعدة ودور التطبيق؟
اعرض الحل المشروح
لا؛ المشروع والمصادقة والشبكة وTLS طبقات مستقلة. تحقق من المستخدم وauthSource والآلية والدور بالإجراء المعتمد. لا تستخدم حساب المشروع اعتماداً أو تفتح كل العناوين، واحفظ مرحلة الخطأ.
2. ينشئ مطور MongoClient ويغلقه لكل طلب HTTP. ماذا تراجع؟
اعرض الحل المشروح
راجع الدورة واستخدم عميلاً ومجمعاً محدودين مناسبين. يضيف الإنشاء لكل طلب اكتشافاً وTLS وقد يضخم الذروة. قس التزامن والمهل والسعة قبل الحدود. لا تعني الإعادة توازياً مطلقاً أو إهمال الإغلاق.
أهم ما تعلمته
- الاتصال والمصادقة والصلاحية وبنية الاستعلام حدود منفصلة.
- استخدم مشغلات متوافقة وعملاء محدودين دون نشر الأسرار.