freeCodeCamp/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/chain-middleware-to-create-...

3.2 KiB

id title localeTitle challengeType
587d7fb1367417b2b2512bf4 Chain Middleware to Create a Time Server سلسلة Middleware لإنشاء خادم الوقت 2

Description

الوسيطة يمكن تركيبه في مسار محدد باستخدام app.METHOD(path, middlewareFunction) . الوسيطة يمكن أيضا أن تكون بالسلاسل داخل تعريف الطريق. انظر إلى المثال التالي:
app.get('/user', function(req, res, next) {
req.user = getTheUserSync(); // Hypothetical synchronous operation
next();
}, function(req, res) {
res.send(req.user);
})
هذه الطريقة مفيدة لتقسيم عمليات الخادم إلى وحدات أصغر. وهذا يؤدي إلى بنية أفضل للتطبيق ، وإمكانية إعادة استخدام الرمز في أماكن مختلفة. يمكن استخدام هذا الأسلوب أيضًا لإجراء بعض التحقق من صحة البيانات. في كل نقطة من مكدس البرامج الوسيطة يمكنك منع تنفيذ التحكم في السلسلة والسلسة الحالية إلى وظائف مصممة خصيصًا للتعامل مع الأخطاء. أو يمكنك تمرير التحكم إلى المسار المطابق التالي ، للتعامل مع الحالات الخاصة. سنرى كيف في قسم Express المتقدمة. في مسار app.get('/now', ...) سلسلة وظيفة الوسيطة والمعالج النهائي. في وظيفة الوسيطة ، يجب إضافة الوقت الحالي إلى كائن الطلب في مفتاح req.time . يمكنك استخدام new Date().toString() . في المعالج ، {time: req.time} باستخدام كائن JSON ، مع أخذ البنية {time: req.time} . تلميح: لن يمر الاختبار إذا لم تقم بربط الوسيطة. إذا قمت بتركيب الوظيفة في مكان آخر ، سيفشل الاختبار ، حتى إذا كانت نتيجة الإخراج صحيحة.

Instructions

Tests

tests:
  - text: يجب أن يكون نقطة النهاية / الآن الوسيطة المثبتة
    testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/chain-middleware-time'').then(data => { assert.equal(data.stackLength, 2, ''"/now" route has no mounted middleware''); }, xhr => { throw new Error(xhr.responseText); })'
  - text: يجب أن تقوم نقطة النهاية / الآن بإرجاع وقت يكون +/- 20 ثانية من الآن
    testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/chain-middleware-time'').then(data => { var now = new Date(); assert.isAtMost(Math.abs(new Date(data.time) - now), 20000, ''the returned time is not between +- 20 secs from now''); }, xhr => { throw new Error(xhr.responseText); })'

Challenge Seed

Solution

// solution required