[MUSIC]
لقد قمنا بالفعل بتطوير خادم REST API كامل باستخدام Express و
MongoDB كجزء من هذه الدورة.
لكي يتمكن الخادم من التواصل بشكل مفيد مع عملائنا،
سنقوم بإجراء بعض التعديلات الطفيفة عليه بحيث يعيد النوع الصحيح من البيانات.
بحيث يمكن تنفيذ العميل لدينا العمل بشكل أكثر كفاءة
مع البيانات التي يتم إرجاعها من جانب الخادم.
لذلك للقيام بذلك،
دعونا نعمل على بعض التعديلات على جانب الخادم لدينا في هذا التمرين.
الذهاب إلى خادمنا في المحرر، قبل أن نبدأ العمل على الخادم،
أود أن أقترح عليك تحميل جميع الصور التي قدمتها
كملف مضغوط في موارد التمرين تسمى images.zip.
قم بفك ضغط الملف ثم الحصول على كافة الصور من هناك،
ثم قم بنسخ تلك الصور إلى مجلد الصور العامة في الخادم الخاص بنا.
لذلك ترى أن هنا قمت بنسخ جميع الصور في
مجلد الصور العامة هنا بالفعل.
لأن الخادم الخاص بنا هو الخادم الذي سيخدم كل هذه الصور
لتطبيق العميل لدينا.
بعد ذلك، نذهب إلى الكورس وضبط تلك القائمة البيضاء، هنا.
لذلك بالنسبة لتطبيق العميل الزاوي الخاص بنا، إذا بدأنا تشغيله
باستخدام أمر خدمة ng، فإنه يعمل في localhost:4200.
لذلك فإن أي طلبات قادمة من
تطبيق Angular الخاص بنا إلى الخادم ستحمل ذلك كأصلها هناك.
لهذا السبب سأقوم بإضافة ذلك إلى قائمتي البيضاء،
بحيث يتم معالجة أي مشاكل في الكورس تلقائيًا.
حتى الذهاب إلى هذا الملف cors.js،
في قائمتي البيضاء، هنا، اسمحوا لي أن أضيف
في http://localhost:، 4200.
وهذا هو الأصل الذي
سينشأ منه كل عميل Angular الخاص بي الطلب الذي يأتي إلى هذا الخادم.
وبهذه الطريقة، لن يسبب بلدي كورس مشاكل لعميل قد الزاوي.
بعد ذلك، نحتاج إلى تحديث عدد قليل من المسارات للتعامل مع
معلمات الاستعلام، وكذلك بعض التعديلات الأخرى الطفيفة.
اسمحوا لي أن أبدأ مع ملفات promoRouter.js.
لذلك هذا أمر بسيط للحصول على تحديث.
حتى الذهاب إلى ملف promoRouter.js، في ملف برومورووتر، للحصول
على طلب الحصول التي نحصل عليها هنا،
بدلا من القيام الترقيات. البحث مع جافا سكريبت فارغة،
وهنا أود أن توريد req.query
كمعلمة لتلك الترقيات.
نفس الشيء مع LeaderRouter أيضا، لذلك اسمحوا لي أن أذهب إلى ملف leaderRouter.js.
وفي LeaderRouter أيضا،
هنا حيث تجد Leaders.Find مع كائن جافا سكريبت فارغ.
بدلاً من ذلك، استبدل ذلك بـ req.query،
بحيث يتم تمرير معلمات الاستعلام.
لذلك هذا هو المكان الذي سنمر فيه في العمود المميز
كمعلمة الاستعلام.
الآن بعد تعديل هذين، دعونا نعمل الآن على مسار الطبق،
لذلك الذهاب إلى ملف dishRouter.js، حتى في DishRouter، نفس التحديث هنا.
حتى الذهاب إلى هذه الأطباق. البحث في طريقة الحصول هنا، تغيير ذلك إلى req.query.
لذلك مع هذا، تم الانتهاء من تحديث ديشروتر الخاص بي.
لذلك قمنا الآن بتحديث بروموراوتر، ريدررووتر، و
ديشروتر، ثم سننتقل إلى تحديث أن فافوريتريوتر.
الآن كنت قد نفذت جهاز التوجيه المفضل كجزء من
المهمة الرابعة الخاصة بك.
الآن في FavoriterOuterOter، سترى أنه بالنسبة لـ
FavoriterOter لا أريك الجزء المتبقي لأنه
يجب عليك القيام به كجزء من مهمتك.
اسمحوا لي أولا أن ألفت انتباهكم إلى طريقة الحصول على
Favoriterouter.Route («/: Dishid').
الآن، أنا ذاهب إلى استخدام هذه الطريقة الحصول فقط
للتحقق للتأكد من أن طبق
معين مع ديشيد هو بالفعل المفضلة للمستخدم.
لذلك بدلا من مجرد قول عملية GET غير معتمدة،
أنا ذاهب فقط للاستفادة من وجود هذه العملية الحصول على.
وبعد ذلك سوف نقول
، المفضلة.
وسوف أقول،
المستخدم: req.user.id
لذلك سوف نجد المفضلة لهذا المستخدم معين.
وبعد ذلك سوف نقول، ثم، المفضلة.
و، قبض ((يخطئ)،
التالي (يخطئ)).
ثم وبالمثل هنا، سوف نضيف في الخطأ هنا.
التالي (err))، هنا.
حتى داخل هذا. ثم, عندما نحصل على المفضلة,
ثم نحن سوف تحقق, إذا (! المفضلة).
لذلك، إذا لم تكن هناك المفضلة لهذا المستخدم،
فمن الواضح أن الطبق الذي نقوم بالتحقق منه غير موجود.
لذا سنعود يا (ريستاتوسكود) 200
سيثيادر ('نوع المحتوى
'' تطبيق/جسون ').
ثم سنعود
قائلا: «موجود»: كاذبة.
لذلك ما نحدده هنا هو أنه إذا تم الحصول على
نقطة النهاية هذه مع Dishid،
سيتم تعيين هذا العلم الموجود هنا إلى true إذا كان هذا الطبق جزءًا من المفضلة.
إذا لم يكن هذا الطبق جزءًا من المفضلة، فسوف أقوم بتعيين العلم الموجود إلى false.
حتى هنا، ترى أنه منذ ليس لدي أي المفضلة، لذلك
يجب أن يكون موجودا تلقائيا خطأ في هذه المرحلة.
لذلك سنقول «موجود»: كاذبة، ومن ثم سنعود المفضلة، هنا.
حسنا، من الواضح في هذه الحالة،
فإن المفضلة تكون فارغة في هذه المرحلة، وإلا.
لذلك مما يعني أن المفضلة ليست فارغة، لذلك سنقول إذا،
(favorites.days.indexOf)،
لذلك نحن ذاهبون للبحث عن req.params.
DisHid، لذلك نحن ذاهبون للبحث في هذا.
الأطباق. صفيف، لمعرفة ما إذا كان هناك طبق موجود في هناك.
وإذا لم يكن موجودًا، فمن الواضح أن هذا سيعود إلى مؤشر سلبي هنا.
لذلك في هذه الحالة أيضا، سأعود بالضبط نفس هنا.
لذلك إذا قامت بإرجاع فهرس سلبي،
فهذا يعني أنه على الرغم من أن هذا المستخدم معين لديه مركز مفضل.
هذا الطبق المحدد غير موجود في القائمة
المفضلة له أو لها، لذلك هذا هو السبب في أنه سوف يعود موجودة كاذبة هنا.
الآن وإلا فإن هذا يعني أن الطبق موجود في قائمة المفضلة.
لذلك في هذه الحالة، سأعود رمز الحالة 200 موجود صحيح.
بهذه الطريقة عندما يقوم المستخدم بإجراء عملية الحصول على
نقطة النهاية هذه مع/favorite/dished.
حيث يتم توفير DisHid كمعلمة هنا.
كمعلمة السجلات هنا،
ثم سوف نتحقق لمعرفة ما إذا كان هذا الطبق موجود في المفضلة.
إذا لم يكن أي من المفضلة موجودة لهذا المستخدم، فسنقوم بإرجاع وجود false.
وبالمثل، إذا كانت المفضلة موجودة،
ولكن هذا الطبق معين غير موجود في المفضلة ثم انها ستعود كاذبة.
وإلا فإنه سيعود صحيح.
لذلك يمكن استخدام هذا العلم الموجود من قبل موكلي للتحقق
لمعرفة ما إذا كان هذا الطبق هو جزء من قائمة الأطباق المفضلة لهذا المستخدم أم لا.
وأخيرا سنقوم بتحديث ملف users.js.
الآن في ملف users.js، نحن بحاجة إلى إضافة في
مجال router.options آخر هنا لأنه في
بعض الأحيان طلب المشاركة كما رأيت مع تسجيل الدخول،
سنرسل الخيارات أولا للتحقق، وخاصة مع السيارات،
ما إذا كان سيتم السماح بطلب آخر.
لهذا السبب سيتحققون من السيارات والسيارات مع الخيارات هنا وبعد ذلك.
سنقوم ببساطة بإرجاع
رسالة حالة من 200 ردا على ذلك.
لذلك لأي نقطة نهاية تحت المستخدمين إذا تلقينا
الخيارات ببساطة إرجاع حالة 200 هنا.
الآن وظيفة تسجيل الدخول التي قمنا بتنفيذها في وقت سابق.
لقد فعلنا ببساطة passport.authenticate ('المحلية') هنا
ثم نتحقق من القيم المتبقية هنا.
الآن هذا passport.authenticate ('المحلية')، إذا لم يتم
مصادقة المستخدم، فإنه ببساطة إرجاع غير مصرح به في رسالة الرد.
الآن قد لا يكون ذلك مفيدًا جدًا
لجانب العميل لعرض هذه المعلومات.
ولهذا السبب سنقوم بتعزيز طريقة تسجيل الدخول بعد جهاز التوجيه
هذه بحيث تقوم المصادقة بإرجاع معلومات أكثر معنى في هذا الجزء.
حتى نفعل ذلك، نحن لن نقوم
بتوثيق جواز السفر في الداخل هنا.
بدلا من ذلك، سوف نأخذ، لذلك اسمحوا لي إزالة ذلك من هناك،
وبعد ذلك سترى كيف سوف تحديث وظيفة جهاز التوجيه هنا.
لذا سنرى سيارات ويثوبوتيونس
وبعد ذلك سنقوم بتضمين req، الدقة والقادمة هنا.
وداخل req، الدقة،
وبعد ذلك هنا، passport.authenticate،
ونحن سوف ندعو هذا مع «المحلية».
الآن عندما نسمي هذا مع المحلية، في حالة
حدوث خطأ في المصادقة، يمكن إجراء passport.authenticate لإرجاع قيمة الخطأ،
وكذلك سيعود المستخدم إذا لم يكن هناك خطأ.
ويمكن أن المعلمة تسمى المعلومات،
والتي سوف تحمل معلومات إضافية التي قد يتم تمريرها مرة أخرى إلى المستخدم.
سيتم إرجاع هذا الخطأ عندما يكون هناك خطأ حقيقي يحدث
في الممكن للمصادقة.
ولكن إذا تم إرسال معلومات المستخدم إلى passport.authenticate ولكن
المستخدم غير موجود، فلا يتم حساب ذلك كخطأ.
بدلاً من ذلك، سيتم حسابها نظرًا لأن المستخدم غير موجود.
ويتم تمرير هذه المعلومات مرة أخرى في كائن المعلومات التي تأتي في.
لذلك سيتم إرجاع الخطأ عندما يكون هناك خطأ حقيقي يحدث أثناء
عملية المصادقة.
ولكن المعلومات، وأنها سوف تحتوي على معلومات إذا كان المستخدم غير موجود وبالتالي
فإن passport.authenticate يمر مرة أخرى رسالة تقول أن المستخدم غير
موجود أو إما اسم المستخدم غير صحيح أو كلمة المرور غير صحيحة.
وهكذا، بحيث سيتم تمرير المعلومات في، في رسالة المعلومات.
الآن، سنرى كيف يكون هذا مفيدًا لنا عندما ننظر إلى جانب العميل
بعد ذلك بقليل.
لذلك في هذه الحالة،
سوف نتعامل مع هذا على النحو التالي.
وليس ذلك فقط، عندما نسمي هذا جواز السفر مصادقة،
ونحن بحاجة أيضا إلى تمرير في (req، res،
التالي) كما أن شريط المعلمات الثلاثة.
لذلك هذا هو الهيكل.
عندما تحتاج إلى الاتصال بمصادقة جواز السفر،
توقع أن تقوم بتمرير معلومات مثل هذه كطريقة معاودة الاتصال هنا.
لذلك تحتاج أيضا إلى توفير هذا req، الدقة القادمة هناك أيضا.
الآن، إذا حدث هذا
لذلك سنقول إذا (خطأ).
لذلك إذا كان هناك خطأ يحدث،
فسنقول العودة التالية (err) ومن ثم السماح
لمعالج الأخطاء من جهاز التوجيه السريع لدينا رعاية ذلك.
الآن، سننظر في حالات أخرى
إذا (! )، لذلك إذا وصلنا إلى هذه النقطة، فهذا يعني أنه
لم يكن خطأ حدث ولكن بدلاً من ذلك ربما لا يمكن العثور على المستخدم.
إذا لم يتم العثور على المستخدم ثم سيتم تعيين المستخدم هنا إلى فارغة في هذه الحالة.
لذلك، في هذه الحالة إذا كان المستخدم غير موجود،
ثم نحن بحاجة إلى أن تكون قادرة على تمرير المعلومات مرة أخرى إلى جانب الخادم.
لذا ما سنفعله هو أننا سنمر في هذه المعلومات بهذا الشكل،
لذا سأقوم بقطع هذا من هنا،
ثم لصقه هنا وبعد ذلك سنقوم بتحريره.
إذا كان المستخدم فارغًا، فسنقوم بإرسال StatusCode
من 401 مما يعني غير مصرح به،
ثم سنقوم بإرسال نجاح المعلومات، false.
وبعد ذلك نحن لن نمر مرة أخرى الرمز، ونحن سوف نمر مرة أخرى رسالة الحالة.
حتى هنا سوف نقول تسجيل الدخول، غير ناجحة.
ثم المعلومات الثالثة سوف تمر هذه المعلومات،
ذلك الكائن الذي تلقيناه هنا كالجزء الثالث في
رسالة الرد التي نرسلها مرة أخرى من الخادم لدينا هنا.
لذلك سيتم إعادة تعيين علامة النجاح إلى false.
سيتم تعيين الحالة تسجيل الدخول غير ناجحة ومعلومات الخطأ،
التي يتم تمريرها في المعلومات سيتم تمريرها مرة أخرى.
لاحظ الآن أن هذا الموقف سيحدث إذا كان اسم المستخدم وكلمة
المرور غير صحيحين.
وبالتالي هذا ليس خطأ، بمعنى الخطأ، ولكن حقيقة أن المصادقة
لا يمكن العثور على المستخدم أو كلمة المرور للمستخدم غير صحيحة.
بحيث سيتم ترميز هذه المعلومات في التدفق الذي يأتي، وحتى
أنني سوف تمر مرة أخرى كخطأ إلى جانب العميل الخاص بي.
وإلا يتم
التعامل مع جزء كما Req.Login.
لذلك إذا كان هذا ناجحا،
فإن passport.authenticate إضافة هذه الطريقة تسمى Req.login للمستخدم.
لذلك في هذه المرحلة سوف نمر فقط في كائن المستخدم الذي حصلنا عليه.
حتى هنا، إذا وصلنا إلى هذه النقطة،
ثم وهذا يعني أن كائن المستخدم ليست فارغة
وأيضا لم يحدث خطأ، وهذا يعني أن
المستخدم يمكن تسجيل الدخول ولذا فإننا سوف نقول خطأ.
لذلك سيحاول تسجيل الدخول إلى المستخدم.
لذا سنقول إذا أخطأت
وبعد ذلك سنرجع نفس النوع من معلومات الخطأ التي فعلناها هنا.
حتى في هذه الحالة، إذا كان الخطأ.
إذا كان الخطأ، ثم سنقوم بتمرير رمز الحالة 401
وسنقول النجاح هو خطأ والحالة هو تسجيل الدخول غير ناجحة.
ثم معلومات الخطأ
سنقوم بتمرير هذا بدلا من
المعلومات التي سنمررها لا يمكن تسجيل الدخول المستخدم.
لذلك هذه هي الرسالة التي سوف تمر مرة أخرى هنا، إذا حدث الخطأ.
وإلا، سنكون أسفل هنا.
وهكذا في هذه المرحلة سنكون قادرين على توليد الرمز المميز.
لذلك إذا وصلنا إلى هذه النقطة فهذا يعني أن المستخدم قد قام
بتسجيل الدخول بنجاح وحتى نتمكن الآن من إنشاء الرمز المميز.
لذلك سنقوم بإنشاء الرمز المميز استنادًا إلى معرف المستخدم ومن
ثم سنقوم بتمرير هذا الرمز مرة أخرى إلى المستخدم.
حتى هنا سوف نقول فار رمزية.
ومن ثم يمكننا أن نقول Res.statusCode = 200، ثم res.json (النجاح) صحيح،
مما يعني أن المستخدم قام بتسجيل الدخول بنجاح.
وبالتالي فإن الحالة ستكون تسجيل الدخول بنجاح،
ثم الجزء الثالث بدلا من الخطأ سوف تمرير الرمز المميز مرة أخرى إلى المستخدم.
لذلك سنقول رمزية، رمزية،
هذا الرمز المميز الذي حصلنا عليه للتو في وقت سابق، بحيث سيتم تمرير
الرمز المميز كخاصية رمزية لرسالة ضوء مزق.
لذلك هنا، لاحظ أن هذا المحور تم تعيينه إلى true.
مما يعني أن المستخدم قام بتسجيل الدخول بنجاح.
وبالتالي يمكن للمستخدم المضي قدما في هذه المرحلة.
وهذا يجب أن يتم داخل Req.Login هنا.
لذلك في هذه المرحلة سنقوم بإغلاق Req.Login.
لذلك لاحظ أن هذا هو داخل هذا req.Login هنا.
لذلك في هناك سوف نمر هؤلاء الثلاثة مرة أخرى.
لذلك اسمحوا لي أن مجرد مسافة بادئة درسية ثلاثة أسطر في.
وهكذا كيف سنتعامل مع تسجيل دخول المستخدمين.
مرة أخرى، مراجعة هذا الرمز مرة أخرى.
لذلك سنقوم بعمل آخر جهاز التوجيه، ولكن
بدلاً من القيام بمصادقة جواز السفر هناك، سنقول req، الدقة،
التالي ثم داخل هنا سنقوم بعمل passport.authenticate المحلية.
وسوف تمر هذه المصادقة مرة أخرى، حتى نتمكن من توفير وظيفة رد الاتصال لذلك.
وستعود وظيفة رد الاتصال هذه إما الخطأ أو المستخدم أو
المعلومات هنا.
وهكذا، إذا حدث خطأ، فسنسمح فقط لمعالج الخطأ السريع
بالاهتمام بذلك.
إذا كان المستخدم فارغًا، فهذا يعني أن تسجيل دخول المستخدم لم يكن ناجحًا،
وسيكون السبب في ذلك في المعلومات بحيث يتم تمريره
كخطأ في المعلومات في رسالة الخطة هنا.
إذا وصلنا إلى هذه النقطة ثم يتم التحقق من المستخدم بنجاح.
حتى ذلك الحين سوف نقوم بتسجيل الدخول للمستخدم.
وبالتالي فإن passport.authenticate إضافة في هذه الطريقة تسمى تسجيل الدخول إلى
رسالة الطلب، حتى نتمكن من استدعاء تسجيل الدخول مع المستخدم
وإذا كان هذا إرجاع خطأ، ثم سنقوم بإرجاع الخطأ هنا بشكل مناسب.
إذا لم يكن الأمر كذلك، سنكون قد وصلنا إلى النقطة التي
تمت مصادقة المستخدم بنجاح حتى يتمكنوا من إنشاء رمز ويب JSON هنا وإرجاع
رمز ويب JSON إلى المستخدم للتأكد من تسجيل المستخدم بنجاح.
هذه هي مجموعة الخطوات التي سنستخدمها هنا.
الآن السبب في أنني أفعل طريقة أكثر تفصيلا للتعامل معها هو أنني أريد
التمييز بين الوضع حيث يحدث خطأ حقيقي أثناء
عملية التطبيق، بدلا من الوضع حيث اسم المستخدم غير صالح،
أو كلمة المرور غير صالحة.
لذلك سيتم التعامل مع هاتين الحالتين من خلال هذا الوضع حيث المعلومات سوف
تحمل المعلومات مرة أخرى لنا.
لذلك هذا ليس خطأ بيرس ولكن هذا
هو الوضع حيث المستخدم ليس مستخدما صالحا أو كلمة مرور المستخدم غير صالحة.
لذلك هذه هي الطريقة التي سوف التعامل مع سجل المستخدم في العملية.
بالإضافة إلى ذلك، سأضيف طريقة واحدة أخرى هنا تسمى،
CheckJWToken.
من الممكن جدا أنه في حين أن العميل قد قام بتسجيل الدخول
والحصول على رمز ويب JSON، في وقت لاحق، قد تنتهي صلاحية رمز JSON Web Token.
وهكذا إذا حاول المستخدم الوصول من جانب العميل مع رمز مميز منتهية الصلاحية
إلى الخادم، فلن يتمكن الخادم من مصادقة المستخدم.
لذلك على فترات دورية، قد نرغب في عبور التحقق للتأكد من أن
رمز ويب JSON لا يزال صالحًا.
لذلك هذا هو السبب في أنني بما في ذلك نقطة نهاية أخرى تسمى
CheckJwtToken، لذلك إذا كنت تفعل الحصول على CheckJwtToken.
من خلال تضمين الرمز المميز في رأس التخويل،
ستعود هذه المكالمة إلى true أو false للإشارة إليك إلى
ما إذا كان رمز ويب JSON لا يزال صالحًا أم لا.
إذا لم يكن صالحًا، فيمكن لجانب العميل بدء تسجيل دخول آخر
للمستخدم للحصول على رمز ويب JSON جديد، إذا لزم الأمر.
لذلك للقيام بذلك، سنقول كورس، كورسويثوبوتيونس و،
ريك، الدقة، هنا، كما هو متوقع.
وهنا سوف نقول،
passport.authenticate ('jwt'،
و، {الجلسة: false}).
وهذا من شأنه أن يعود خطأ، المستخدم، المعلومات.
لذلك تذكر كيف استخدمنا مصدق جواز السفر في وقت سابق.
لذلك تقع جلسة JWT هنا.
حتى في وقت سابق هنا نقول، passport.authenticate المحلية.
لذلك هذا هو للمصادقة المحلية.
لذلك هذا هو لمصادقة رمز ويب JSON.
لذلك عندما نسمي ذلك، لأن ذلك سيتحقق من رمز ويب JSON،
لذلك سأقول، إذا (err)، عد التالي (err).
ثم دع معالج الخطأ Express يعتني بهذا الوضع.
وبعد ذلك سنقول، إذا (! المستخدم)،
إذا كان المستخدم غير موجود، ثم وبالمثل، آخر.
مما يعني أنه إذا تم العثور على كائن المستخدم من رمز ويب JSON
ثم تم تحميله على req.user، فهذا يعني أن المستخدم مستخدم صالح.
وهكذا يمكن السماح للمضي قدما.
خلاف ذلك، سنقول أن المستخدم غير موجود.
لذلك نحن بحاجة إلى استنتاج أن رمز ويب JSON قد انتهت صلاحيته.
لذلك في هذه المرحلة، سنرسل دقة مع رمز الحالة
401، لذلك غير مصرح به.
سيثيادر (، «نوع المحتوى
»، «تطبيق/جسون»).
ثم سنعود الدقة،
.json، سنقول، {الحالة:،
«JWT غير صالح!».
وبعد ذلك سنعود العلم يسمى النجاح: كاذبة.
ثم, سنقوم بإرجاع المعلومات التي
نحصل عليها إذا لم يتم مصادقة المستخدم كخطأ في هذه المرحلة.
وإلا، فهذا يعني أننا نصل إلى هذه النقطة عندما يكون المستخدم مستخدمًا صالحًا.
حتى في هذه الحالة، اسمحوا لي فقط نسخ هذا الرمز هنا،
ونحن سوف ترسل رمز الحالة من 200،
وبعد ذلك res.json إرسال جوت،
صالح! ، والنجاح سيكون صحيحا.
والجزء الثالث، سوف نرسل معلومات المستخدم.
وبهذه الطريقة، عندما يتم استدعاء نقطة النهاية هذه
باستخدام طريقة get، فسيتحقق هذا مما إذا كان الرمز المميز صالحًا أم لا.
إذا كان الرمز المميز صالحًا، فستتلقى هذا الرد.
ومن علامة النجاح في الرد،
يمكنك التحقق لمعرفة ما إذا كان رمز ويب JSON صالحًا أم لا.
وهذا مفيد على جانب العميل.
الآن هذا جواز السفر هنا, passport.authenticate هنا,
يجب أن يتم توفيره مع req و الدقة كما المعلمات اثنين هنا.
لذا هكذا نسمي ذلك جواز السفر.
لاحظ أنه عند استدعاء passport.authenticate
وتتوقع وظيفة رد الاتصال هذه هنا، تحتاج إلى إلحاق هذه النقطة، req،
.res، إلى ذلك passport.authenticate، ثم العودة إلى هنا.
لذلك مع هذا، قمنا بتحديث كل شيء على جانب الخادم.
لذلك دعونا حفظ جميع التغييرات على جانب الخادم.
حتى الآن خادمنا جاهز
للتعامل مع الطلبات الواردة من عميل Angular الخاص بنا.
مع هذا، نكمل هذا التمرين.
في هذا التمرين، قمنا الآن بإعداد خادم Express الخاص بنا
للتعامل مع الطلبات الواردة من عميلنا Angular.
في التمرين التالي، سنلقي نظرة على العميل Angular بمزيد من التفصيل
لفهم كيفية التواصل مع هذا الخادم الإضافي.
هذا هو الوقت المناسب بالنسبة لك للقيام جيت الالتزام مع الرسالة،
ودمج العميل والخادم.
[ موسيقى]