From f2e5f44da63d0ce1535bd22cde2191270b5c85af Mon Sep 17 00:00:00 2001 From: Beau Carnes Date: Wed, 24 Apr 2019 22:30:21 -0400 Subject: [PATCH] fix: Add Api challenges - Arabic translation (#35157) * fix: add Api challenges - Arabic * fix: md format issue --- .../exercise-tracker.arabic.md | 52 ++++++++++++++++ .../file-metadata-microservice.arabic.md | 46 ++++++++++++++ ...quest-header-parser-microservice.arabic.md | 44 +++++++++++++ .../timestamp-microservice.arabic.md | 54 ++++++++++++++++ .../url-shortener-microservice.arabic.md | 48 +++++++++++++++ ...ddleware-to-create-a-time-server.arabic.md | 48 +++++++++++++++ .../get-data-from-post-requsts.arabic.md | 51 ++++++++++++++++ ...-parameter-input-from-the-client.arabic.md | 46 ++++++++++++++ ...-parameter-input-from-the-client.arabic.md | 45 ++++++++++++++ ...-level-request-logger-middleware.arabic.md | 47 ++++++++++++++ .../meet-the-node-console.arabic.md | 42 +++++++++++++ .../serve-an-html-file.arabic.md | 45 ++++++++++++++ .../serve-json-on-a-specific-route.arabic.md | 43 +++++++++++++ .../serve-static-assets.arabic.md | 43 +++++++++++++ .../start-a-working-express-server.arabic.md | 46 ++++++++++++++ ...dy-parser-to-parse-post-requests.arabic.md | 48 +++++++++++++++ .../use-the-.env-file.arabic.md | 43 +++++++++++++ ...description-to-your-package.json.arabic.md | 47 ++++++++++++++ ...d-a-license-to-your-package.json.arabic.md | 47 ++++++++++++++ ...d-a-version-to-your-package.json.arabic.md | 45 ++++++++++++++ ...dd-keywords-to-your-package.json.arabic.md | 51 ++++++++++++++++ ...-with-external-packages-from-npm.arabic.md | 51 ++++++++++++++++ ...y-node.js-project-or-npm-package.arabic.md | 50 +++++++++++++++ ...nderstanding-semantic-versioning.arabic.md | 56 +++++++++++++++++ ...a-package-from-your-dependencies.arabic.md | 46 ++++++++++++++ ...st-minor-version-of-a-dependency.arabic.md | 49 +++++++++++++++ ...st-patch-version-of-a-dependency.arabic.md | 49 +++++++++++++++ ...helpers-to-narrow-search-results.arabic.md | 42 +++++++++++++ .../create-a-model.arabic.md | 61 +++++++++++++++++++ ...ate-and-save-a-record-of-a-model.arabic.md | 46 ++++++++++++++ ...e-many-records-with-model.create.arabic.md | 41 +++++++++++++ ...many-documents-with-model.remove.arabic.md | 42 +++++++++++++ ...nt-using-model.findbyidandremove.arabic.md | 41 +++++++++++++ .../install-and-set-up-mongoose.arabic.md | 45 ++++++++++++++ ...s-by-running-find-edit-then-save.arabic.md | 43 +++++++++++++ ...ent-using-model.findoneandupdate.arabic.md | 43 +++++++++++++ ...se-model.find-to-search-your-dataarabic.md | 42 +++++++++++++ ...id-to-search-your-database-by-id.arabic.md | 41 +++++++++++++ ...hing-document-from-your-database.arabic.md | 41 +++++++++++++ 39 files changed, 1810 insertions(+) create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/exercise-tracker.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/file-metadata-microservice.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/request-header-parser-microservice.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/timestamp-microservice.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/url-shortener-microservice.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/chain-middleware-to-create-a-time-server.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-data-from-post-requsts.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-query-parameter-input-from-the-client.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-route-parameter-input-from-the-client.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/implement-a-root-level-request-logger-middleware.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-static-assets.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-description-to-your-package.json.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-license-to-your-package.json.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-version-to-your-package.json.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-keywords-to-your-package.json.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/remove-a-package-from-your-dependencies.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-caret-character-to-use-the-latest-minor-version-of-a-dependency.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-tilde-character-to-always-use-the-latest-patch-version-of-a-dependency.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/chain-search-query-helpers-to-narrow-search-results.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-a-model.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-and-save-a-record-of-a-model.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-many-records-with-model.create.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-many-documents-with-model.remove.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-one-document-using-model.findbyidandremove.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/install-and-set-up-mongoose.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-new-updates-on-a-document-using-model.findoneandupdate.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.find-to-search-your-dataarabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findbyid-to-search-your-database-by-id.arabic.md create mode 100644 curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findone-to-return-a-single-matching-document-from-your-database.arabic.md diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/exercise-tracker.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/exercise-tracker.arabic.md new file mode 100644 index 0000000000..fe8e4d9eb9 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/exercise-tracker.arabic.md @@ -0,0 +1,52 @@ +--- +id: 5a8b073d06fa14fcfde687aa +title: Exercise Tracker +localeTitle: متتبع التمرين +challengeType: 4 +isRequired: true +--- + +## Description +
+إنشاء تطبيق جافا سكريبت كامل للمكدس يشبه وظيفيًا ما يلي: https://fuschia-custard.glitch.me/ . +سيشركك العمل في هذا المشروع في كتابة شفرتك على Glitch في مشروعنا المبدئي. بعد الانتهاء من هذا المشروع ، يمكنك نسخ عنوان URL الافتراضي الخاص بك (إلى الصفحة الرئيسية لتطبيقك) في هذه الشاشة لاختباره! اختياريًا ، يمكنك اختيار كتابة مشروعك على نظام أساسي آخر ، ولكن يجب أن يكون مرئيًا بشكل عام لاختبارنا. +ابدأ هذا المشروع على خلل باستخدام هذا الرابط أو استنساخ هذا المستودع على GitHub! إذا كنت تستخدم خلل ، تذكر لحفظ الرابط لمشروعك في مكان آمن! +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يمكنني إنشاء مستخدم عن طريق نشر اسم مستخدم بيانات النموذج إلى / api / exercise / new-user وسيتم إرجاع كائن باسم المستخدم و _id . + testString: '' + - text: يمكنني الحصول على مجموعة من جميع المستخدمين عن طريق الحصول على api / exercise / users مع نفس المعلومات عند إنشاء مستخدم. + testString: '' + - text: "يمكنني إضافة تمرين إلى أي مستخدم عن طريق نشر بيانات userId (_id) ، والوصف ، والمدة ، والتاريخ الاختياري إلى / api / exercise / add. إذا لم يتم تقديم تاريخ ، فسيستخدم التاريخ الحالي. سيعرض التطبيق كائن المستخدم مع إضافة حقول التمرين " + testString: '' + - text: يمكنني استرداد سجل تمرين كامل لأي مستخدم من خلال الحصول على / api / exercise / log بمعلمة userId (_id). سيقوم التطبيق بإرجاع كائن المستخدم مع سجل صفيف المضافة وعدد (العدد الكلي للتمرين). + testString: '' + - text: "يمكنني استرداد جزء من سجل أي مستخدم عن طريق تمرير المعلمات الاختيارية من وإلى أو الحد. (تنسيق التاريخ yyyy-mm-dd ، limit = int) " + testString: '' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/file-metadata-microservice.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/file-metadata-microservice.arabic.md new file mode 100644 index 0000000000..8066ba08ab --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/file-metadata-microservice.arabic.md @@ -0,0 +1,46 @@ +--- +id: bd7158d8c443edefaeb5bd0f +title: File Metadata Microservice +localeTitle: الملف الفوقية ميكروسيرفيسي +challengeType: 4 +isRequired: true +--- + +## Description +
+بإنشاء تطبيق جافا سكريبت كامل المكدس الذي يشبه وظيفيًا ما يلي: https://purple-paladin.glitch.me/ . +سيشركك العمل في هذا المشروع في كتابة شفرتك على Glitch في مشروعنا المبدئي. بعد الانتهاء من هذا المشروع ، يمكنك نسخ عنوان URL الافتراضي الخاص بك (إلى الصفحة الرئيسية لتطبيقك) في هذه الشاشة لاختباره! اختياريًا ، يمكنك اختيار كتابة مشروعك على نظام أساسي آخر ، ولكن يجب أن يكون مرئيًا بشكل عام لاختبارنا. +ابدأ هذا المشروع على خلل باستخدام هذا الرابط أو استنساخ هذا المستودع على GitHub! إذا كنت تستخدم خلل ، تذكر لحفظ الرابط لمشروعك في مكان آمن! +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يمكنني إرسال كائن FormData يتضمن تحميل ملف. + testString: '' + - text: "عند إرسال شيء ما ، سأتلقى حجم الملف بالبايت ضمن استجابة JSON" + testString: '' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/request-header-parser-microservice.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/request-header-parser-microservice.arabic.md new file mode 100644 index 0000000000..74b547a211 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/request-header-parser-microservice.arabic.md @@ -0,0 +1,44 @@ +--- +id: bd7158d8c443edefaeb5bdff +title: Request Header Parser Microservice +localeTitle: طلب رأس محلل ميكروسيرفيسي +challengeType: 4 +isRequired: true +--- + +## Description +
+بإنشاء تطبيق جافا سكريبت كامل المكدس الذي يشبه وظيفيًا هذا: https://dandelion-roar.glitch.me/ . +سيشركك العمل في هذا المشروع في كتابة شفرتك على Glitch في مشروعنا المبدئي. بعد الانتهاء من هذا المشروع ، يمكنك نسخ عنوان URL الافتراضي الخاص بك (إلى الصفحة الرئيسية لتطبيقك) في هذه الشاشة لاختباره! اختياريًا ، يمكنك اختيار كتابة مشروعك على نظام أساسي آخر ، ولكن يجب أن يكون مرئيًا بشكل عام لاختبارنا. +ابدأ هذا المشروع على خلل باستخدام هذا الرابط أو استنساخ هذا المستودع على GitHub! إذا كنت تستخدم خلل ، تذكر لحفظ الرابط لمشروعك في مكان آمن! +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: "يمكنني الحصول على عنوان IP ولغة ونظام التشغيل لمتصفحي." + testString: '' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/timestamp-microservice.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/timestamp-microservice.arabic.md new file mode 100644 index 0000000000..db97dc3e8d --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/timestamp-microservice.arabic.md @@ -0,0 +1,54 @@ +--- +id: bd7158d8c443edefaeb5bdef +title: Timestamp Microservice +localeTitle: Timestamp Microservice +challengeType: 4 +isRequired: true +--- + +## Description +
+بإنشاء تطبيق جافا سكريبت كامل المكدس الذي يشبه وظيفيًا ما يلي: https://curse-arrow.glitch.me/ . +سيشركك العمل في هذا المشروع في كتابة شفرتك على Glitch في مشروعنا المبدئي. بعد الانتهاء من هذا المشروع ، يمكنك نسخ عنوان URL الافتراضي الخاص بك (إلى الصفحة الرئيسية لتطبيقك) في هذه الشاشة لاختباره! اختياريًا ، يمكنك اختيار كتابة مشروعك على نظام أساسي آخر ، ولكن يجب أن يكون مرئيًا بشكل عام لاختبارنا. +ابدأ هذا المشروع على خلل باستخدام هذا الرابط أو استنساخ هذا المستودع على GitHub! إذا كنت تستخدم خلل ، تذكر لحفظ الرابط لمشروعك في مكان آمن! +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: "يجب أن يتعامل مع تاريخ صالح ، ويعيد الطابع الزمني الصحيح لـ unix" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/api/timestamp/2016-12-25'').then(data => { assert.equal(data.unix, 1482624000000, ''Should be a valid unix timestamp''); }, xhr => { throw new Error(xhr.responseText); })' + - text: "يجب أن يتعامل مع تاريخ صالح ، وإرجاع سلسلة UTC الصحيحة" + testString: 'getUserInput => $.get(getUserInput(''url'')+ ''/api/timestamp/2016-12-25'').then(data => { assert.equal(data.utc, ''Sun, 25 Dec 2016 00:00:00 GMT'', ''Should be a valid UTC date string''); }, xhr => { throw new Error(xhr.responseText); })' + - text: "يجب أن يتعامل مع تاريخ unix صالح ، ويعيد الطابع الزمني الصحيح لـ unix" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/api/timestamp/1482624000000'').then(data => { assert.equal(data.unix, 1482624000000) ; }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن ترجع رسالة الخطأ المتوقعة لتاريخ غير صالح + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/api/timestamp/this-is-not-a-date'').then(data => { assert.equal(data.error.toLowerCase(), ''invalid date'');}, xhr => { throw new Error(xhr.responseText); })' + - text: "يجب معالجة معلمة تاريخ فارغة ، وإرجاع الوقت الحالي بتنسيق unix" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/api/timestamp'').then(data => { var now = Date.now(); assert.approximately(data.unix, now, 20000) ;}, xhr => { throw new Error(xhr.responseText); })' + - text: "يجب أن يتعامل مع معلمة تاريخ فارغة ، وإرجاع الوقت الحالي بتنسيق UTC" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/api/timestamp'').then(data => { var now = Date.now(); var serverTime = (new Date(data.utc)).getTime(); assert.approximately(serverTime, now, 20000) ;}, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/url-shortener-microservice.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/url-shortener-microservice.arabic.md new file mode 100644 index 0000000000..a45761018d --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/apis-and-microservices-projects/url-shortener-microservice.arabic.md @@ -0,0 +1,48 @@ +--- +id: bd7158d8c443edefaeb5bd0e +title: URL Shortener Microservice +localeTitle: URL Shortener Microservice +challengeType: 4 +isRequired: true +--- + +## Description +
+بإنشاء تطبيق جافا سكريبت كامل المكدس الذي يشبه وظيفيًا هذا: https://thread-paper.glitch.me/ . +سيشركك العمل في هذا المشروع في كتابة شفرتك على Glitch في مشروعنا المبدئي. بعد الانتهاء من هذا المشروع ، يمكنك نسخ عنوان URL الافتراضي الخاص بك (إلى الصفحة الرئيسية لتطبيقك) في هذه الشاشة لاختباره! اختياريًا ، يمكنك اختيار كتابة مشروعك على نظام أساسي آخر ، ولكن يجب أن يكون مرئيًا بشكل عام لاختبارنا. +ابدأ هذا المشروع على خلل باستخدام هذا الرابط أو استنساخ هذا المستودع على GitHub! إذا كنت تستخدم خلل ، تذكر لحفظ الرابط لمشروعك في مكان آمن! +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يمكنني تمرير عنوان URL كمعلمة وسيتلقى عنوان URL مختصرًا في استجابة JSON. + testString: '' + - text: "إذا قمت بتمرير عنوان URL غير صالح لا يتبع تنسيق http://www.example.com الصالح ، فستتضمن استجابة JSON خطأً بدلاً من ذلك" + testString: '' + - text: "عندما أزور عنوان URL المختصر هذا ، سيعيد توجيهي إلى الرابط الأصلي." + testString: '' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/chain-middleware-to-create-a-time-server.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/chain-middleware-to-create-a-time-server.arabic.md new file mode 100644 index 0000000000..476417c077 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/chain-middleware-to-create-a-time-server.arabic.md @@ -0,0 +1,48 @@ +--- +id: 587d7fb1367417b2b2512bf4 +title: Chain Middleware to Create a Time Server +localeTitle: سلسلة Middleware لإنشاء خادم الوقت +challengeType: 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 +
+ +```yml +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 +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-data-from-post-requsts.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-data-from-post-requsts.arabic.md new file mode 100644 index 0000000000..da9d913da1 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-data-from-post-requsts.arabic.md @@ -0,0 +1,51 @@ +--- +id: 587d7fb2367417b2b2512bf8 +title: Get Data from POST Requests +localeTitle: الحصول على البيانات من طلبات POST +challengeType: 2 +--- + +## Description +
+بتحميل معالج POST على المسار /name . انها نفس الطريق كما كان من قبل. قمنا بإعداد نموذج في صفحة HTML الأمامية. وسوف يقدم نفس البيانات من التمرين 10 (سلسلة الاستعلام). إذا تم تكوين محلل الجسم بشكل صحيح ، يجب أن تجد المعلمات في الكائن req.body . إلقاء نظرة على المثال المعتاد للمكتبة: +
route: POST '/library'
urlencoded_body: userId=546&bookId=6754
req.body: {userId: '546', bookId: '6754'}
+رد باستخدام نفس كائن JSON كما كان من قبل: {name: 'firstname lastname'} . اختبر إذا كانت نقطة النهاية تعمل باستخدام نموذج html الذي قدمناه في صفحة التطبيق الأولى. +نصيحة: هناك العديد من طرق http الأخرى بخلاف GET و POST. وبموجب الاتفاقية هناك تناظر بين الفعل http ، والعملية التي ستنفذها على الخادم. التعيين التقليدي هو: +POST (أحيانًا PUT) - إنشاء مورد جديد باستخدام المعلومات المرسلة مع الطلب ، +GET - قراءة مورد موجود بدون تعديله ، +PUT أو PATCH (أحيانًا POST) - تحديث مورد باستخدام البيانات تم الإرسال ، +DELETE => حذف مورد. +هناك أيضًا طريقتين أخريين تستخدمان للتفاوض على اتصال بالخادم. باستثناء GET ، يمكن أن تحتوي جميع الطرق الأخرى المذكورة أعلاه على حمولة (أي البيانات في نص الطلب). يعمل الوسيطة محلل الجسم مع هذه الأساليب كذلك. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: "الاختبار 1: يجب أن تستجيب نقطة نهاية API الخاصة بك بالاسم الصحيح" + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/name'', {first: ''Mick'', last: ''Jagger''}).then(data => { assert.equal(data.name, ''Mick Jagger'', ''Test 1: "POST /name" route does not behave as expected'') }, xhr => { throw new Error(xhr.responseText); })' + - text: "الاختبار 2: يجب أن تستجيب نقطة نهاية API الخاصة بك بالاسم الصحيح" + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/name'', {first: ''Keith'', last: ''Richards''}).then(data => { assert.equal(data.name, ''Keith Richards'', ''Test 2: "POST /name" route does not behave as expected'') }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-query-parameter-input-from-the-client.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-query-parameter-input-from-the-client.arabic.md new file mode 100644 index 0000000000..04c5d02d75 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-query-parameter-input-from-the-client.arabic.md @@ -0,0 +1,46 @@ +--- +id: 587d7fb2367417b2b2512bf6 +title: Get Query Parameter Input from the Client +localeTitle: الحصول على إدخال معلمة طلب البحث من العميل +challengeType: 2 +--- + +## Description +
+طريقة شائعة أخرى للحصول على مدخلات من العميل هي بتشفير البيانات بعد مسار المسار ، باستخدام سلسلة استعلام. تكون سلسلة الاستعلام محددة بعلامة استفهام (؟) ، وتتضمن أزواج الحقل = القيمة. يتم فصل كل زوجين بواسطة علامة العطف (&). يمكن لـ Express تحليل البيانات من سلسلة الاستعلام ، req.query الكائن req.query . لا يمكن أن تكون بعض الأحرف في عناوين URL ، يجب أن يتم ترميزها بتنسيق مختلف قبل أن تتمكن من إرسالها. إذا كنت تستخدم واجهة برمجة التطبيقات من جافا سكريبت ، فيمكنك استخدام طرق محددة لتشفير / فك تشفير هذه الأحرف. +
route_path: '/library'
actual_request_URL: '/library?userId=546&bookId=6754'
req.query: {userId: '546', bookId: '6754'}
+إنشاء نقطة نهاية API ، محملة على GET /name . الرد باستخدام مستند JSON ، مع أخذ البنية { name: 'firstname lastname'} . يجب ترميز معلمات الاسم الأول والأخير في سلسلة استعلام على سبيل المثال: ?first=firstname&last=lastname . +نصيحة: سنقوم في التمرين التالي بتلقي بيانات من طلب POST ، على نفس مسار مسار /name . إذا كنت تريد يمكنك استخدام الطريقة app.route(path).get(handler).post(handler) . تسمح لك هذه البنية بسلسلة معالجات الأفعال المختلفة على نفس مسار المسار. يمكنك حفظ جزء من الكتابة ، والحصول على رمز أنظف. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: "الاختبار 1: يجب أن تستجيب نقطة نهاية API الخاصة بك بالاسم الصحيح" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/name?first=Mick&last=Jagger'').then(data => { assert.equal(data.name, ''Mick Jagger'', ''Test 1: "GET /name" route does not behave as expected'') }, xhr => { throw new Error(xhr.responseText); })' + - text: "الاختبار 2: يجب أن تستجيب نقطة نهاية APi الخاصة بك بالاسم الصحيح" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/name?last=Richards&first=Keith'').then(data => { assert.equal(data.name, ''Keith Richards'', ''Test 2: "GET /name" route does not behave as expected'') }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-route-parameter-input-from-the-client.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-route-parameter-input-from-the-client.arabic.md new file mode 100644 index 0000000000..e923c4988d --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/get-route-parameter-input-from-the-client.arabic.md @@ -0,0 +1,45 @@ +--- +id: 587d7fb2367417b2b2512bf5 +title: Get Route Parameter Input from the Client +localeTitle: الحصول على إدخال معلمة المسار من العميل +challengeType: 2 +--- + +## Description +
+عند إنشاء واجهة برمجة التطبيقات ، يتعين علينا السماح للمستخدمين بالاتصال بنا بما يريدون الحصول عليه من خدمتنا. على سبيل المثال ، إذا كان العميل يطلب معلومات حول مستخدم مخزّن في قاعدة البيانات ، فيحتاج إلى طريقة لإعلامنا بالمستخدم الذي يهتم به. تتمثل إحدى الطرق الممكنة لتحقيق هذه النتيجة في استخدام معلمات المسار. تدعى معلمات المسار أجزاء من عنوان URL ، مفصولة بشرائط مائلة (/). يلتقط كل مقطع قيمة جزء عنوان URL الذي يطابق موقعه. يمكن العثور على القيم التي تم التقاطها في كائن req.params . +
route_path: '/user/:userId/book/:bookId'
actual_request_URL: '/user/546/book/6754'
req.params: {userId: '546', bookId: '6754'}
+إنشاء ملقم صدى ، التي شنت على الطريق GET /:word/echo . الرد باستخدام كائن JSON ، مع أخذ بنية {echo: word} . يمكنك العثور على الكلمة المراد تكرارها على req.params.word . يمكنك اختبار مسارك من شريط العناوين بالمتصفح ، وزيارة بعض المسارات المطابقة ، على سبيل المثال your-app-rootpath / freecodecamp / echo +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: "الاختبار 1: يجب أن يكرر خادم الصدى الكلمات بشكل صحيح" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/eChOtEsT/echo'').then(data => { assert.equal(data.echo, ''eChOtEsT'', ''Test 1: the echo server is not working as expected'') }, xhr => { throw new Error(xhr.responseText); })' + - text: "الاختبار 2: يجب أن يكرر خادم الصدى الكلمات بشكل صحيح" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/ech0-t3st/echo'').then(data => { assert.equal(data.echo, ''ech0-t3st'', ''Test 2: the echo server is not working as expected'') }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/implement-a-root-level-request-logger-middleware.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/implement-a-root-level-request-logger-middleware.arabic.md new file mode 100644 index 0000000000..c01fa0eafd --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/implement-a-root-level-request-logger-middleware.arabic.md @@ -0,0 +1,47 @@ +--- +id: 587d7fb1367417b2b2512bf3 +title: Implement a Root-Level Request Logger Middleware +localeTitle: تنفيذ برنامج Logware Logger Logger على مستوى الجذر +challengeType: 2 +--- + +## Description +
+قبل أن نقدم وظيفة الوسيطة express.static() . الآن حان الوقت لنرى ما هي الوسيطة ، بمزيد من التفصيل. دالات الوسيطية هي الدوال التي تأخذ 3 حجج: كائن الطلب ، كائن الاستجابة ، والدالة التالية في دورة طلب-استجابة التطبيق. هذه الوظائف تنفيذ بعض التعليمات البرمجية التي يمكن أن يكون لها آثار جانبية على التطبيق ، وعادة ما تضيف المعلومات إلى الكائنات استجابة أو طلب. يمكنهم أيضًا إنهاء دورة إرسال الاستجابة ، عند استيفاء بعض الشروط. إذا لم يرسلوا الاستجابة ، فعند الانتهاء من ذلك ، يبدأون تنفيذ الوظيفة التالية في المكدس. يتم تشغيل هذا استدعاء الوسيطة الثالثة next() . مزيد من المعلومات في الوثائق السريعة . +انظر إلى المثال التالي: +
function(req, res, next) {
console.log("I'm a middleware...");
next();
}
+دعونا نفترض أننا شنت هذه الوظيفة على الطريق. عندما يطابق أحد الطلبات المسار ، فإنه يعرض السلسلة "أنا برنامج وسيط ...". ثم ينفذ الوظيفة التالية في المكدس. +في هذا التمرين ، سنقوم ببناء برنامج وسيط بمستوى الجذر. كما رأينا في التحدي 4 ، لتركيب وظيفة الوسيطة على مستوى الجذر يمكننا استخدام طريقة app.use(<mware-function>) . في هذه الحالة ، سيتم تنفيذ الوظيفة لجميع الطلبات ، ولكن يمكنك أيضًا تعيين شروط أكثر تحديدًا. على سبيل المثال ، إذا كنت تريد تنفيذ دالة فقط لطلبات POST ، فيمكنك استخدام app.post(<mware-function>) . توجد أساليب مماثلة لجميع الأفعال http (GET، DELETE، PUT،…). +بناء بسيط المسجل. لكل طلب ، يجب عليه تسجيل الدخول في وحدة التحكم سلسلة أخذ التنسيق التالي: method path - ip . قد يبدو المثال: GET /json - ::ffff:127.0.0.1 . لاحظ أن هناك مسافة بين method و path وأن اندفاعة فصل path و ip وتحيط به مساحة على جانبي. يمكنك الحصول على طريقة الطلب (الفعل المتشعب) ، ومسار المسار النسبي ، req.method المتصل من كائن الطلب ، باستخدام req.method ، req.path و req.ip تذكر الاتصال next() عند الانتهاء ، أو أن الخادم الخاص بك سيكون عالقاً إلى الأبد. تأكد من فتح "السجلات" ، وشاهد ما سيحدث عند وصول بعض الطلبات ... +تلميح: يقوم Express بتقييم الوظائف بالترتيب الذي تظهر به في التعليمة البرمجية. هذا صحيح على الوسيطة أيضا. إذا كنت تريد أن تعمل في جميع المسارات ، فيجب تثبيتها قبلها. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تكون البرامج الوسيطة لمسجل المستوى الجذر نشطة + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/root-middleware-logger'').then(data => { assert.isTrue(data.passed, ''root-level logger is not working as expected''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.arabic.md new file mode 100644 index 0000000000..5a569f7ac2 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/meet-the-node-console.arabic.md @@ -0,0 +1,42 @@ +--- +id: 587d7fb0367417b2b2512bed +title: Meet the Node console +localeTitle: تعرف على وحدة التحكم في العقدة +challengeType: 2 +--- + +## Description +
+أثناء عملية التطوير ، من المهم أن تكون قادراً على التحقق من ما يجري في التعليمات البرمجية. العقدة هي مجرد بيئة جافا سكريبت. مثل جافا سكريبت من جانب العميل ، يمكنك استخدام وحدة التحكم لعرض معلومات تصحيح الأخطاء المفيدة. على جهازك المحلي ، سترى إخراج وحدة التحكم في جهاز طرفي. على خلل ، يمكنك فتح السجلات في الجزء السفلي من الشاشة. يمكنك تبديل لوحة السجل بزر "سجلات" الزر (أعلى اليسار ، تحت اسم التطبيق). +للبدء ، ما عليك سوى طباعة "Hello World" الكلاسيكية في وحدة التحكم. نوصي بإبقاء لوحة السجلات مفتوحة أثناء العمل على مواجهة هذه التحديات. قراءة السجلات يمكنك أن تكون على علم بطبيعة الأخطاء التي قد تحدث. +
+ +## Instructions +
+قم بتعديل الملف myApp.js لتسجيل "Hello World" إلى وحدة التحكم. +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن يكون "Hello World" في وحدة التحكم + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/hello-console'').then(data => { assert.isTrue(data.passed, ''"Hello World" is not in the server console''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.arabic.md new file mode 100644 index 0000000000..0f342ff08c --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-an-html-file.arabic.md @@ -0,0 +1,45 @@ +--- +id: 587d7fb0367417b2b2512bef +title: Serve an HTML File +localeTitle: تخدم ملف HTML +challengeType: 2 +--- + +## Description +
+يمكننا الرد باستخدام ملف باستخدام الطريقة res.sendFile(path) . +يمكنك وضعه داخل app.get('/', ...) توجيه app.get('/', ...) . وراء الكواليس ، تقوم هذه الطريقة بتعيين الرؤوس المناسبة لإرشاد المتصفح الخاص بك حول كيفية التعامل مع الملف الذي تريد إرساله ، وفقًا لنوعه. ثم سوف يقرأ ويرسل الملف. هذه الطريقة تحتاج إلى مسار ملف مطلق. نوصي باستخدام المتغير العام __dirname لحساب المسار. +سبيل المثال absolutePath = __dirname + relativePath/file.ext . +الملف المطلوب إرساله هو /views/index.html . جرِّب "إظهار تطبيقك" ، يجب أن تشاهد عنوان HTML كبيرًا (ونموذجًا سنستخدمه لاحقًا ...) ، دون تطبيق أي أسلوب. +ملاحظة: يمكنك تحرير حل التحدي السابق ، أو إنشاء حل جديد. إذا قمت بإنشاء حل جديد ، فضع في اعتبارك أن Express يقيم المسارات من الأعلى إلى الأسفل. ينفذ المعالج للمباراة الأولى. يجب عليك التعليق على الحل السابق ، أو سيستمر الخادم في الاستجابة باستخدام سلسلة. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن يخدم تطبيقك ملف المشاهدات / index.html + testString: 'getUserInput => $.get(getUserInput(''url'')).then(data => { assert.match(data, /

.*<\/h1>/, ''Your app does not serve the expected HTML''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +

+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.arabic.md new file mode 100644 index 0000000000..0e1f01933b --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-json-on-a-specific-route.arabic.md @@ -0,0 +1,43 @@ +--- +id: 587d7fb1367417b2b2512bf1 +title: Serve JSON on a Specific Route +localeTitle: خدمة JSON على طريق معين +challengeType: 2 +--- + +## Description +
+بينما يخدم خادم HTML (الذي خمنته!) HTML ، فإن واجهة برمجة التطبيقات تخدم البيانات. تسمح واجهة برمجة التطبيقات (Rpresentational State Transfer) REST بتبادل البيانات بطريقة بسيطة ، دون الحاجة إلى معرفة العملاء لأي تفاصيل حول الخادم. يحتاج العميل فقط إلى معرفة مصدر المورد (عنوان URL) والإجراء الذي يريد تنفيذه عليه (الفعل). يتم استخدام الفعل GET عندما تقوم بجلب بعض المعلومات ، دون تعديل أي شيء. في هذه الأيام ، يكون تنسيق البيانات المفضل لنقل المعلومات عبر الويب هو JSON. ببساطة ، JSON هي طريقة ملائمة لتمثيل كائن JavaScript كسلسلة ، بحيث يمكن نقله بسهولة. +لنقم بإنشاء واجهة برمجة تطبيقات بسيطة عن طريق إنشاء مسار يستجيب مع JSON على المسار /json . يمكنك القيام بذلك كالمعتاد ، مع طريقة app.get() . داخل معالج المسار ، استخدم الطريقة res.json() ، وتمريرها في كائن كوسيطة. تغلق هذه الطريقة حلقة الطلب-الاستجابة ، وتعيد البيانات. وراء الكواليس ، يقوم بتحويل كائن جافا سكريبت صالح إلى سلسلة ، ثم يقوم بتعيين الرؤوس المناسبة لإخبار المتصفح أنك تخدم JSON ، ويرسل البيانات مرة أخرى. يحتوي الكائن الصحيح على البنية المعتادة {key: data} . يمكن البيانات با رقم ، سلسلة ، كائن متداخل أو مصفوفة. يمكن أن تكون البيانات أيضًا متغيرًا أو نتيجة استدعاء دالة ؛ في هذه الحالة سيتم تقييمه قبل تحويله إلى سلسلة. +خدمة الكائن {"message": "Hello json"} كاستجابة في تنسيق JSON ، إلى طلبات GET إلى المسار /json . ثم أشر المتصفح الخاص بك إلى التطبيق الخاص بك-رابط / json ، يجب أن تشاهد الرسالة على الشاشة. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: "يجب أن تخدم نقطة النهاية /json كائن json {'message': 'Hello json'} " + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/json'').then(data => { assert.equal(data.message, ''Hello json'', ''The \''/json\'' endpoint does not serve the right data''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-static-assets.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-static-assets.arabic.md new file mode 100644 index 0000000000..d5959d2ece --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/serve-static-assets.arabic.md @@ -0,0 +1,43 @@ +--- +id: 587d7fb0367417b2b2512bf0 +title: Serve Static Assets +localeTitle: خدمة الأصول الثابتة +challengeType: 2 +--- + +## Description +
+يحتوي خادم HTML عادة على واحد أو أكثر من الدلائل التي يمكن الوصول إليها من قبل المستخدم. يمكنك وضع الأصول الثابتة التي يحتاج إليها التطبيق الخاص بك (أوراق الأنماط ، البرامج النصية ، الصور). في Express يمكنك وضع هذه الوظيفة باستخدام الوسيطة express.static(path) ، حيث تكون المعلمة هي المسار المطلق للمجلد الذي يحتوي على الأصول. إذا كنت لا تعرف ما هي الوسيطة ، فلا تقلق. سنناقشها فيما بعد بالتفصيل. في المقام الأول الوسيطة هي وظائف تعترض معالجات الطريق ، تضيف نوعا من المعلومات. تحتاج الوسيطة app.use(path, middlewareFunction) باستخدام طريقة app.use(path, middlewareFunction) . وسيطة المسار الأول اختيارية. إذا لم تنجح ، سيتم تنفيذ الوسيطة لجميع الطلبات. +app.use() البرامج الوسيطة express.static() لكافة الطلبات باستخدام app.use() . المسار المطلق لمجلد الأصول هو __dirname + /public . +يجب أن يكون تطبيقك الآن قادرًا على تقديم ورقة أنماط CSS. من خارج المجلد العام سوف تظهر محملة إلى الدليل الجذر. من المفترض أن تبدو صفحتك الأولى أفضل قليلاً الآن! +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن يخدم تطبيقك ملفات مواد العرض من الدليل /public + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/style.css'').then(data => { assert.match(data, /body\s*\{[^\}]*\}/, ''Your app does not serve static assets''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.arabic.md new file mode 100644 index 0000000000..51da2209a6 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/start-a-working-express-server.arabic.md @@ -0,0 +1,46 @@ +--- +id: 587d7fb0367417b2b2512bee +title: Start a Working Express Server +localeTitle: بدء تشغيل ملقم Express العمل +challengeType: 2 +--- + +## Description +
+في أول سطرين من الملف myApp.js يمكنك أن ترى كيف أنه من السهل إنشاء كائن تطبيق Express. يحتوي هذا الكائن على عدة طرق ، وسوف نتعلم الكثير منها في هذه التحديات. إحدى الطرق الأساسية هي app.listen(port) . فإنه يخبر الخادم الخاص بك للاستماع على منفذ معين ، ووضعها في حالة تشغيل. يمكنك رؤيتها في أسفل الملف. من داخل التعليقات لأننا نحتاج إلى تشغيل التطبيق في الخلفية لأسباب اختبار. كل التعليمات البرمجية التي قد ترغب في إضافتها تنتقل بين هذين الجزأين الأساسيين. يقوم Glitch بتخزين رقم المنفذ في process.env.PORT متغير البيئة. قيمتها 3000 . +دعونا نخدم أول سلسلة لدينا! في Express ، تأخذ المسارات البنية التالية: app.METHOD(PATH, HANDLER) . الطريقة هي طريقة http في الأحرف الصغيرة. PATH هو مسار نسبي على الخادم (يمكن أن يكون عبارة عن سلسلة أو حتى تعبير عادي). HANDLER هي وظيفة يقوم Express باستدعاءها عند مطابقة المسار. +تأخذ معالجات function(req, res) {...} الشكل function(req, res) {...} ، حيث req هي كائن الطلب ، و res هو كائن الاستجابة. على سبيل المثال ، المعالج +
function(req, res) {
res.send('Response String');
}
+سيخدم السلسلة "سلسلة الاستجابة". +استخدم طريقة app.get() لعرض سلسلة Hello Express ، لطلبات GET التي تطابق مسار / root. تأكد من عمل التعليمات البرمجية الخاصة بك بالنظر إلى السجلات ، ثم انظر النتائج في المستعرض الخاص بك ، والنقر فوق الزر 'إظهار Live' في واجهة المستخدم Glitch UI. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن يخدم تطبيقك السلسلة "Hello Express" + testString: 'getUserInput => $.get(getUserInput(''url'')).then(data => { assert.equal(data, ''Hello Express'', ''Your app does not serve the text "Hello Express"''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.arabic.md new file mode 100644 index 0000000000..bb473720ad --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-body-parser-to-parse-post-requests.arabic.md @@ -0,0 +1,48 @@ +--- +id: 587d7fb2367417b2b2512bf7 +title: Use body-parser to Parse POST Requests +localeTitle: استخدام محلل body to Parse POST الطلبات +challengeType: 2 +--- + +## Description +
+بالإضافة إلى GET هناك فعل http شائع آخر ، هو POST. POST هي الطريقة الافتراضية المستخدمة لإرسال بيانات العميل بنماذج HTML. في REST convention يستخدم POST لإرسال البيانات لإنشاء عناصر جديدة في قاعدة البيانات (مستخدم جديد ، أو مشاركة مدونة جديدة). لا توجد لدينا قاعدة بيانات في هذا المشروع ، لكننا سنتعلم كيفية التعامل مع طلبات POST على أي حال. +في هذا النوع من الطلبات لا تظهر البيانات في عنوان URL ، تكون مخفية في نص الطلب. هذا جزء من طلب HTML ، ويسمى أيضًا الحمولة. نظرًا لأن HTML يعتمد على النص ، حتى إذا لم تكن ترى البيانات ، فهذا لا يعني أنها سرية. يتم عرض المحتوى الأساسي لطلب HTTP POST أدناه: +
POST /path/subpath HTTP/1.0
From: john@example.com
User-Agent: someBrowser/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
name=John+Doe&age=25
+كما ترى ، يتم تشفير الجسم مثل سلسلة الاستعلام. هذا هو التنسيق الافتراضي المستخدم في نماذج HTML. مع Ajax يمكننا أيضا استخدام JSON لتكون قادرة على التعامل مع البيانات التي لديها بنية أكثر تعقيدا. هناك أيضًا نوع آخر من الترميز: multipart / form-data. هذا واحد يستخدم لتحميل الملفات الثنائية. +في هذا التمرين ، سنستخدم هيئة urlencoded. +لتحليل البيانات الواردة من طلبات POST ، يجب عليك تثبيت حزمة: محلل الجسم. تتيح لك هذه الحزمة استخدام سلسلة من البرامج الوسيطة ، والتي يمكن أن تفك شفرة البيانات بتنسيقات مختلفة. شاهد المستندات هنا . +قم بتثبيت وحدة تحليل الجسم في الحزمة. json. ثم تطلب ذلك في الجزء العلوي من الملف. قم بتخزينه في متغير اسمه bodyParser. +يتم إرجاع الوسيطة لمعالجة البيانات المشفرة بواسطة bodyParser.urlencoded({extended: false}) . extended=false هو خيار تكوين يخبر المحلل باستخدام التشفير التقليدي. عند استخدامه ، يمكن أن تكون القيم سلاسل أو صفائف فقط. النسخة الموسعة تسمح بمرونة أكبر للبيانات ، ولكن يفوقها JSON. تمرير إلى app.use() الدالة التي تم إرجاعها بواسطة استدعاء الأسلوب السابق. كالعادة ، يجب تركيب الوسيطة قبل كل الطرق التي تحتاجها. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب تركيب الوسيطة 'body-parser' + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/add-body-parser'').then(data => { assert.isAbove(data.mountedAt, 0, ''"body-parser" is not mounted correctly'') }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.arabic.md new file mode 100644 index 0000000000..3e017c34d3 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/basic-node-and-express/use-the-.env-file.arabic.md @@ -0,0 +1,43 @@ +--- +id: 587d7fb1367417b2b2512bf2 +title: Use the .env File +localeTitle: استخدم ملف .env +challengeType: 2 +--- + +## Description +
+الملف .env عبارة عن ملف مخفي يستخدم لتمرير متغيرات البيئة إلى التطبيق الخاص بك. هذا الملف سري ، لا أحد ولكن يمكنك الوصول إليه ، ويمكن استخدامه لتخزين البيانات التي تريد الاحتفاظ بها خاصة أو مخفية. على سبيل المثال ، يمكنك تخزين مفاتيح API من الخدمات الخارجية أو عنوان URI الخاص بقاعدة البيانات. يمكنك أيضًا استخدامه لتخزين خيارات التهيئة. عن طريق إعداد خيارات التكوين ، يمكنك تغيير سلوك التطبيق الخاص بك ، دون الحاجة إلى إعادة كتابة بعض التعليمات البرمجية. +يمكن الوصول إلى متغيرات البيئة من التطبيق مثل process.env.VAR_NAME . الكائن process.env هو كائن عقدة عمومي ، ويتم تمرير المتغيرات كسلسلة. حسب الاصطلاح ، أسماء المتغيرات كلها أحرف كبيرة ، مع الكلمات مفصولة تسطير سفلي. .env عبارة عن ملف shell ، لذلك لا تحتاج إلى التفاف الأسماء أو القيم بين علامتي اقتباس. من المهم أيضًا ملاحظة أنه لا يمكن توفير مسافة حول علامة equals عند تعيين قيم للمتغيرات ، مثل VAR_NAME=value . عادة ، ستضع كل تعريف متغير على سطر منفصل. +دعونا إضافة متغير بيئة كخيار التكوين. قم بتخزين متغير MESSAGE_STYLE=uppercase في ملف .env . ثم أخبر معالج مسار GET /json الذي قمت بإنشائه في التحدي الأخير لتحويل رسالة كائن الاستجابة إلى أحرف كبيرة إذا كانت process.env.MESSAGE_STYLE تساوي uppercase . يجب أن يصبح كائن الاستجابة {"message": "HELLO JSON"} . +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تتغير استجابة نقطة النهاية /json طبقًا لمتغير البيئة MESSAGE_STYLE + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/use-env-vars'').then(data => { assert.isTrue(data.passed, ''The response of "/json" does not change according to MESSAGE_STYLE''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-description-to-your-package.json.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-description-to-your-package.json.arabic.md new file mode 100644 index 0000000000..90fabc64be --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-description-to-your-package.json.arabic.md @@ -0,0 +1,47 @@ +--- +id: 587d7fb3367417b2b2512bfc +title: Add a Description to Your package.json +localeTitle: أضف وصفًا إلى الحزمة. json +challengeType: 2 +--- + +## Description +
+الجزء التالي من حزمة جيدة. json هو حقل الوصف ، حيث ينتمي وصف قصير ولكن غني بالمعلومات عن مشروعك. +إذا كنت تخطط في يوم ما لنشر حزمة إلى npm ، تذكر أن هذه هي السلسلة التي يجب أن تبيع فكرتك للمستخدم عندما يقررون تثبيت الحزمة الخاصة بك أم لا. ومع ذلك ، هذه ليست حالة الاستخدام الوحيدة للوصف: إنها طريقة رائعة لتلخيص ما يفعله المشروع ، لا يقل أهمية عن مشاريع Node.js العادية لمساعدة مطورين آخرين ، أو مشرفين مستقبليين أو حتى مستقبلك على فهم المشروع. بسرعة. +بغض النظر عن ما كنت تخطط لمشروعك، وأوصت بالتأكيد وصفا. دعونا نضيف شيئًا مشابهًا لهذا: +"description": "A project that does something awesome", +إرشادات +أضف وصفًا إلى الحزمة package.json في مشروع Glitch. +تذكر لاستخدام علامات الاقتباس المزدوجة لأسماء المجال ( ") والفواصل (،) للفصل بين الحقول. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: package.json يجب أن يكون مفتاح "وصف" صالح + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert(packJson.description, ''"description" is missing''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-license-to-your-package.json.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-license-to-your-package.json.arabic.md new file mode 100644 index 0000000000..4646b10d56 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-license-to-your-package.json.arabic.md @@ -0,0 +1,47 @@ +--- +id: 587d7fb4367417b2b2512bfe +title: Add a License to Your package.json +localeTitle: إضافة ترخيص إلى الحزمة الخاصة بك +challengeType: 2 +--- + +## Description +
+حقل الترخيص هو المكان الذي تبلغ المستخدمين فيه بمشروعك المسموح لهم القيام به. +بعض التراخيص المشتركة لمشاريع مفتوحة المصدر تشمل MIT و BSD. يعد http://choosealicense.com موردًا رائعًا إذا كنت تريد معرفة المزيد حول الترخيص الذي يمكن أن يناسب مشروعك. +معلومات الترخيص غير مطلوبة. ستمنحك قوانين حقوق الطبع والنشر في معظم البلدان ملكية ما تنشئه افتراضيًا. ومع ذلك ، فمن الأفضل دائمًا تحديد ما يمكن للمستخدمين فعله وما لا يمكنهم فعله. +مثال +"license": "MIT", +تعليمات +قم بتعبئة حقل الترخيص في الحزمة. json من مشروع Glitch الخاص بك كما تجد مناسبة. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: package.json يجب أن يكون مفتاح "ترخيص" صالح + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert(packJson.license, ''"license" is missing''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-version-to-your-package.json.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-version-to-your-package.json.arabic.md new file mode 100644 index 0000000000..59c1b11f73 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-a-version-to-your-package.json.arabic.md @@ -0,0 +1,45 @@ +--- +id: 587d7fb4367417b2b2512bff +title: Add a Version to Your package.json +localeTitle: أضف إصدارًا إلى الحزمة الخاصة بك. json +challengeType: 2 +--- + +## Description +
+الإصدار مع اسم واحد من الحقول المطلوبة في package.json. يصف هذا الحقل الإصدار الحالي لمشروعك. +مثال +"version": "1.2", +Instruction +بإضافة نسخة إلى package.json في مشروع Glitch الخاص بك. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: package.json يجب أن يكون لديك مفتاح "إصدار" صالح + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert(packJson.version, ''"version" is missing''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-keywords-to-your-package.json.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-keywords-to-your-package.json.arabic.md new file mode 100644 index 0000000000..0e4ad56776 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/add-keywords-to-your-package.json.arabic.md @@ -0,0 +1,51 @@ +--- +id: 587d7fb4367417b2b2512bfd +title: Add Keywords to Your package.json +localeTitle: أضف كلمات رئيسية إلى package.json الخاص بك +challengeType: 2 +--- + +## Description +
+حقل الكلمات الرئيسية هو المكان الذي يمكنك فيه وصف مشروعك باستخدام الكلمات الرئيسية ذات الصلة. +مثال +"keywords": [ "descriptive", "related", "words" ], +كما ترى ، يتم تنظيم هذا الحقل على هيئة مصفوفة من سلاسل مقتبسة مزدوجة. +إرشادات +أضف مصفوفة من السلاسل المناسبة إلى حقل الكلمات الرئيسية في الحزمة. json من مشروع Glitch. +يجب أن تكون واحدة من الكلمات الأساسية freecodecamp. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن يحتوي package.json على مفتاح "كلمات رئيسية" صالح + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert(packJson.keywords, ''"keywords" is missing''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن يكون حقل "الكلمات الرئيسية" مصفوفة + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.isArray(packJson.keywords, ''"keywords" is not an array''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن تتضمن "الكلمات الرئيسية" "freecodecamp" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.include(packJson.keywords, ''freecodecamp'', ''"keywords" does not include "freecodecamp"''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.arabic.md new file mode 100644 index 0000000000..e103c21b8f --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/expand-your-project-with-external-packages-from-npm.arabic.md @@ -0,0 +1,51 @@ +--- +id: 587d7fb4367417b2b2512c00 +title: Expand Your Project with External Packages from npm +localeTitle: توسيع المشروع الخاص بك مع الحزم الخارجية من npm +challengeType: 2 +--- + +## Description +
+واحدة من أكبر الأسباب لاستخدام مدير الحزمة هي إدارة التبعية القوية. بدلاً من الاضطرار يدويًا إلى التأكد من حصولك على جميع الاعتمادات عندما تقوم بإعداد مشروع على كمبيوتر جديد ، يقوم npm تلقائيًا بتثبيت كل شيء لك. ولكن كيف يمكن لـ npm أن تعرف بالضبط ما يحتاجه مشروعك؟ تعرّف على قسم التبعيات في الحزمة. json. +في قسم التبعيات ، يتم تخزين الحزم التي تحتاجها مشروعك باستخدام التنسيق التالي: +"dependencies": { +"package-name": "version", +"express": "4.14.0" +} +إرشادات +قم بإضافة الإصدار 2.14.0 من حزمة الحزم إلى حقل التبعيات الخاص بك من package.json +Moment هي مكتبة مفيدة للعمل مع الوقت والتواريخ. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تتضمن "التبعيات" "لحظة" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, ''moment'', ''"dependencies" does not include "moment"''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن يكون إصدار "اللحظة" هو "2.14.0" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.match(packJson.dependencies.moment, /^[\^\~]?2\.14\.0/, ''Wrong version of "moment" installed. It should be 2.14.0''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.arabic.md new file mode 100644 index 0000000000..575ec7c950 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/how-to-use-package.json-the-core-of-any-node.js-project-or-npm-package.arabic.md @@ -0,0 +1,50 @@ +--- +id: 587d7fb3367417b2b2512bfb +title: 'How to Use package.json, the Core of Any Node.js Project or npm Package' +localeTitle: "كيفية استخدام package.json ، أو Core of Any Node.js Project أو npm Package" +challengeType: 2 +--- + +## Description +
+إن ملف package.json هو مركز أي مشروع Node.js أو حزمة npm. يخزن معلومات حول مشروعك تمامًا مثل - يصف القسم في مستند HTML محتوى صفحة الويب. يتكون package.json من كائن JSON واحد حيث يتم تخزين المعلومات في "مفتاح": أزواج القيم. لا يوجد سوى حقلين مطلوبين في الحد الأدنى من package.json - الاسم والإصدار - إلا أنه من الممارسات الجيدة توفير معلومات إضافية حول مشروعك يمكن أن تكون مفيدة للمستخدمين أو مشرفين المستقبل. +حقل المؤلف +إذا ذهبت إلى مشروع Glitch الذي قمت بإعداده سابقًا وانظرت إلى الجانب الأيسر من شاشتك ، فستجد شجرة الملفات حيث يمكنك رؤية نظرة عامة على مختلف الملفات في مشروعك. ضمن القسم الخلفي لشجرة الملفات ، ستجد حزمة package.json - الملف الذي سنحسّنه في التحديين التاليين. +أحد أكثر أجزاء المعلومات شيوعًا في هذا الملف هو حقل المؤلف الذي يحدد منشئ المشروع. يمكن أن يكون إما سلسلة أو كائن مع تفاصيل الاتصال. الهدف موصى به للمشاريع الأكبر ، ولكن في حالتنا ، سوف تفعل سلسلة بسيطة مثل المثال التالي. +"author": "Jane Doe", +Instructions +أضف اسمك إلى حقل المؤلف في الحزمة. json لمشروع Glitch. +تذكر أنك تكتب JSON. +يجب أن تستخدم جميع أسماء الحقول علامات اقتباس مزدوجة (") ، على سبيل المثال" المؤلف " +يجب فصل جميع الحقول بفاصلة (،) +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: package.json يجب أن يكون مفتاح "المؤلف" صالح + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert(packJson.author, ''"author" is missing''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.arabic.md new file mode 100644 index 0000000000..45ad2aaa90 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/manage-npm-dependencies-by-understanding-semantic-versioning.arabic.md @@ -0,0 +1,56 @@ +--- +id: 587d7fb5367417b2b2512c01 +title: Manage npm Dependencies By Understanding Semantic Versioning +localeTitle: إدارة التبعيات npm عن طريق فهم الإصدار الدلالي +challengeType: 2 +--- + +## Description +
+إصدارات من حزم npm في قسم التبعيات من package.json الخاص بك يتبع ما يسمى بإصدار Semantic (SemVer) ، وهو معيار صناعي لإصدارات البرامج التي تهدف إلى تسهيل إدارة التبعيات. يجب أن تستخدم المكتبات وأطر العمل أو غيرها من الأدوات المنشورة على npm نظام SemVer من أجل إيصال نوع التغييرات التي يمكن للمشاريع التي تعتمد على الحزمة أن تتوقع إذا تم تحديثها. +SemVer لا معنى له في مشاريع دون واجهات برمجة التطبيقات العامة - وذلك ما لم مشروع مشابه لالأمثلة أعلاه، استخدم شكل إصدارات أخرى. +لماذا تحتاج لفهم SemVer؟ +معرفة SemVer يمكن أن تكون مفيدة عند تطوير البرمجيات التي تستخدم الاعتماد على الخارج (والتي تفعل دائما تقريبا). في يوم من الأيام ، سيوفر لك فهمك لهذه الأرقام من إدخال تغييرات مفاجئة إلى مشروعك دون فهم لماذا لا تسير الأمور "التي عملت بالأمس" فجأة. +هذه هي الطريقة التي يعمل بها الإصدار الدارجة وفقًا للموقع الرسمي: +بالنظر إلى رقم الإصدار MAJOR.MINOR.PATCH ، قم بزيادة: +إصدار رئيسي عند إجراء تغييرات غير متوافقة على واجهة برمجة التطبيقات ، إصدار +MINOR عند إضافة وظائف بطريقة متوافقة إلى الخلف و +الإصدار PATCH عند إجراء إصلاحات الأخطاء المتوافقة. +وهذا يعني أن PATCHes هي إصلاحات للأخطاء ، وإضافة MINORs إلى ميزات جديدة ، ولكن لا أحد منهما يكسر ما نجح من قبل. وأخيرًا ، تضيف MAJORs تغييرات لن تعمل مع الإصدارات السابقة. +مثال +رقم إصدار لغوي: 1.3.8 +إرشادات +في قسم التبعيات في الحزمة الخاصة بك. json ، قم بتغيير إصدار اللحظة لمطابقة الإصدار 2 من MAJOR والإصدار 10 من MINOR والإصدار PATCH 2 +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تتضمن "التبعيات" "لحظة" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, ''moment'', ''"dependencies" does not include "moment"''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن يكون إصدار "اللحظة" هو "2.10.2" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.match(packJson.dependencies.moment, /^[\^\~]?2\.10\.2/, ''Wrong version of "moment". It should be 2.10.2''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/remove-a-package-from-your-dependencies.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/remove-a-package-from-your-dependencies.arabic.md new file mode 100644 index 0000000000..0067802798 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/remove-a-package-from-your-dependencies.arabic.md @@ -0,0 +1,46 @@ +--- +id: 587d7fb5367417b2b2512c04 +title: Remove a Package from Your Dependencies +localeTitle: قم بإزالة حزمة من التبعيات الخاصة بك +challengeType: 2 +--- + +## Description +
+لقد قمت الآن باختبار بعض الطرق التي يمكنك من خلالها إدارة تبعيات مشروعك باستخدام قسم تبعيات package.json. لقد قمت بتضمين الحزم الخارجية عن طريق إضافتها إلى الملف وحتى إخبار npm بأنواع الإصدارات التي تريدها باستخدام أحرف خاصة مثل tilde (~) أو علامة الإقحام (^). +ولكن ماذا لو كنت ترغب في إزالة حزمة خارجية لم تعد بحاجة إليها؟ كنت قد خمنت بالفعل - فقط إزالة "مفتاح" المقابلة: الزوج قيمة لذلك من الاعتماديات الخاصة بك. +تنطبق هذه الطريقة نفسها على إزالة الحقول الأخرى في الحزمة الخاصة بك. json بالإضافة إلى +تعليمات +إزالة لحظة الحزمة من التبعيات الخاصة بك. +تأكد من حصولك على كمية مناسبة من الفواصل بعد إزالتها. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب ألا تتضمن "التبعيات" "لحظة" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.notProperty(packJson.dependencies, ''moment'', ''"dependencies" still includes "moment"''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-caret-character-to-use-the-latest-minor-version-of-a-dependency.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-caret-character-to-use-the-latest-minor-version-of-a-dependency.arabic.md new file mode 100644 index 0000000000..722fd39b9f --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-caret-character-to-use-the-latest-minor-version-of-a-dependency.arabic.md @@ -0,0 +1,49 @@ +--- +id: 587d7fb5367417b2b2512c03 +title: Use the Caret-Character to Use the Latest Minor Version of a Dependency +localeTitle: استخدم حرف الإقحام لاستخدام أحدث إصدار ثانوي من التبعية +challengeType: 2 +--- + +## Description +
+شبيه بالكيفية التي سمعت بها التلدة (~) التي تعلمناها في التحدي الأخير لـ npm لتثبيت أحدث PATCH للتبعية ، تسمح علامة الإقحام (^) لـ npm لتثبيت التحديثات المستقبلية أيضًا. الفرق هو أن حرف الإقحام سيسمح بتحديثات MINOR و PATCHes. +في الوقت الحالي ، يجب أن يكون الإصدار الحالي من اللحظة ~ 2.10.2 والذي يسمح لـ npm بالتثبيت على أحدث إصدار 2.10.x. إذا استخدمنا بدلاً من ذلك علامة الإقحام (^) كبادئة للإصدار ، فسيتم السماح لـ npm بالتحديث إلى أي إصدار 2.xx. +مثال +"some-package-name": "^1.3.8" allows updates to any 1.xx version. +تعليمات +استخدم حرف الإقحام (^) لبدء إصدار اللحظة في تبعياتك والسماح لـ npm بتحديثه إلى أي إصدار جديد صغير. +لاحظ أنه لا يجب تغيير أرقام الإصدارات نفسها. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تتضمن "التبعيات" "لحظة" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, ''moment'', ''"dependencies" does not include "moment"''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن يتطابق إصدار "اللحظة" مع "^ 2.x.x" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.match(packJson.dependencies.moment, /^\^2\./, ''Wrong version of "moment". It should be ^2.10.2''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-tilde-character-to-always-use-the-latest-patch-version-of-a-dependency.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-tilde-character-to-always-use-the-latest-patch-version-of-a-dependency.arabic.md new file mode 100644 index 0000000000..5d34e4793c --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/managing-packages-with-npm/use-the-tilde-character-to-always-use-the-latest-patch-version-of-a-dependency.arabic.md @@ -0,0 +1,49 @@ +--- +id: 587d7fb5367417b2b2512c02 +title: Use the Tilde-Character to Always Use the Latest Patch Version of a Dependency +localeTitle: استخدم حرف التلدة إلى استخدام أحدث إصدار تصحيح من تبعية +challengeType: 2 +--- + +## Description +
+في التحدي الأخير ، أخبرنا npm بتضمين إصدار محدد فقط من الحزمة. هذه طريقة مفيدة لتجميد تبعياتك إذا كنت بحاجة إلى التأكد من أن الأجزاء المختلفة من مشروعك تبقى متوافقة مع بعضها البعض. ولكن في معظم حالات الاستخدام ، لا تريد أن تفوتك أي إصلاحات للأخطاء ، نظرًا لأنها غالبًا ما تتضمن تصحيحات أمنية مهمة (ورجاءً) ألا تكسر الأشياء في القيام بذلك. +للسماح بتبعية npm ليتم تحديثها إلى أحدث إصدار PATCH ، يمكنك بادئة إصدار التبعية بحرف التلدة (~). في package.json ، فإن القاعدة الحالية التي نتبعها حول كيفية قيام npm بترقية اللحظة هي استخدام إصدار محدد فقط (2.10.2) ، ولكننا نريد السماح بأحدث إصدار 2.10.x. +مثال +"some-package-name": "~1.3.8" allows updates to any 1.3.x version. +إرشادات +استخدم حرف التلدة (~) لبدء إصدار اللحظة في تبعياتك والسماح لـ npm بتحديثه إلى أي إصدار PATCH جديد. +لاحظ أنه لا يجب تغيير أرقام الإصدارات نفسها. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تتضمن "التبعيات" "لحظة" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, ''moment'', ''"dependencies" does not include "moment"''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن يتطابق إصدار "اللحظة" "~ 2.10.2" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/package.json'').then(data => { var packJson = JSON.parse(data); assert.match(packJson.dependencies.moment, /^\~2\.10\.2/, ''Wrong version of "moment". It should be ~2.10.2''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/chain-search-query-helpers-to-narrow-search-results.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/chain-search-query-helpers-to-narrow-search-results.arabic.md new file mode 100644 index 0000000000..5696e94034 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/chain-search-query-helpers-to-narrow-search-results.arabic.md @@ -0,0 +1,42 @@ +--- +id: 587d7fb9367417b2b2512c12 +title: Chain Search Query Helpers to Narrow Search Results +localeTitle: سلسلة بحث مساعدة المساعدين لضيق نتائج البحث +challengeType: 2 +--- + +## Description +
+إذا لم تقم بتمرير معاودة الاتصال كالوسيطة الأخيرة إلى Model.find () (أو إلى طرق البحث الأخرى) ، فلن يتم تنفيذ الاستعلام. يمكنك تخزين الاستعلام في متغير للاستخدام في وقت لاحق. يمكّنك هذا النوع من الكائنات من إنشاء استعلام باستخدام بناء جملة تسلسل. يتم تنفيذ البحث الفعلي db عندما تقوم بسلسلة الأسلوب .exec () أخيراً. تمرير رد الاتصال الخاص بك لهذه الطريقة الأخيرة. هناك العديد من مساعدي الاستعلام ، هنا سنستخدم الأكثر شيوعًا. +العثور على الناس الذين يحبون "بوريتو". وفرزها حسب الاسم ، وحصر النتائج في مستندين ، وإخفاء عمرهم. سلسلة .find () ، .sort () ، .limit () ، .select () ، ثم .exec (). تمرير الاستدعاء (err، data) المنفذة exec (). +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تنجح مساعدين الاستعلام تسلسل + testString: 'getUserInput => $.ajax({url: getUserInput(''url'') + ''/_api/query-tools'', type: ''POST'', contentType:''application/json'', data: JSON.stringify([{name: ''Pablo'', age: 26, favoriteFoods: [''burrito'', ''hot-dog'']}, {name: ''Bob'', age: 23, favoriteFoods: [''pizza'', ''nachos'']}, {name: ''Ashley'', age: 32, favoriteFoods: [''steak'', ''burrito'']}, {name: ''Mario'', age: 51, favoriteFoods: [''burrito'', ''prosciutto'']} ]) }).then(data => { assert.isArray(data, ''the response should be an Array''); assert.equal(data.length, 2, ''the data array length is not what expected''); assert.notProperty(data[0], ''age'', ''The returned first item has too many properties''); assert.equal(data[0].name, ''Ashley'', ''The returned first item name is not what expected''); assert.notProperty(data[1], ''age'', ''The returned second item has too many properties''); assert.equal(data[1].name, ''Mario'', ''The returned second item name is not what expected'');}, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-a-model.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-a-model.arabic.md new file mode 100644 index 0000000000..2d2a9c2d4b --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-a-model.arabic.md @@ -0,0 +1,61 @@ +--- +id: 587d7fb6367417b2b2512c07 +title: Create a Model +localeTitle: خلق نموذج +challengeType: 2 +--- + +## Description +
+أولا وقبل كل ما نحتاج إليه في المخطط. كل مخطط مخططات إلى مجموعة MongoDB. يحدد شكل المستندات داخل هذه المجموعة. +المخططات هي العنصر الأساسي للنماذج. يمكن أن تكون متداخلة لإنشاء نماذج معقدة ، ولكن في هذه الحالة سنبقي الأمور بسيطة. +يتيح لك نموذج إنشاء مثيلات لكائنات ، تسمى مستندات. +إنشاء شخص لديه هذا النموذج الأولي: +- Person Prototype - +-------------------- +name : string [required] +age : number +favoriteFoods : array of strings (*) +استخدم أنواع المخطط الأساسي للنمس. إذا أردت يمكنك أيضا إضافة +حقول أكثر من ذلك، استخدام المصادقون بسيطة مثل المطلوبة أو فريدة من نوعها، +القيم الافتراضية والمحددة. انظر مستندات النمس . +[C] RUD الجزء الأول - CREATE +ملاحظة: خلل هو خادم حقيقي ، والخوادم الحقيقية في التفاعلات مع ديسيبل يحدث في وظائف معالج. يتم تنفيذ هذه الوظيفة عند حدوث بعض الأحداث (على سبيل المثال ، يضرب أحد الأشخاص نقطة نهاية على واجهة برمجة التطبيقات). سنتبع نفس النهج في هذه التمارين. الدالة done () هي رد اتصال يخبرنا أنه يمكننا المتابعة بعد إكمال عملية غير متزامنة مثل الإدراج أو البحث أو التحديث أو الحذف. إنه يتبع اصطلاح "عقدة" ويجب أن يتم استدعاؤه كـ "فارغ (بيانات) فارغة" أو "تم" (خطأ) على الخطأ. +تحذير - عند التفاعل مع الخدمات عن بعد ، قد تحدث أخطاء! +/* Example */ +var someFunc = function(done) { +//... do something (risky) ... +if(error) return done(error); +done(null, result); +}; +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن ينجح إنشاء مثيل من مخطط النمس + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/_api/mongoose-model'', {name: ''Mike'', age: 28, favoriteFoods: [''pizza'', ''cheese'']}).then(data => { assert.equal(data.name, ''Mike'', ''"model.name" is not what expected''); assert.equal(data.age, ''28'', ''"model.age" is not what expected''); assert.isArray(data.favoriteFoods, ''"model.favoriteFoods" is not an Array''); assert.include(data.favoriteFoods, ''pizza'', ''"model.favoriteFoods" does not include the expected items''); assert.include(data.favoriteFoods, ''cheese'', ''"model.favoriteFoods" does not include the expected items''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-and-save-a-record-of-a-model.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-and-save-a-record-of-a-model.arabic.md new file mode 100644 index 0000000000..789917d57c --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-and-save-a-record-of-a-model.arabic.md @@ -0,0 +1,46 @@ +--- +id: 587d7fb6367417b2b2512c09 +title: Create and Save a Record of a Model +localeTitle: إنشاء وحفظ سجل للنموذج +challengeType: 2 +--- + +## Description +
+إنشاء نسخة من المستند باستخدام مُنشئ الشخص الذي قمت بإنشائه من قبل. تمرير إلى المنشئ كائن له اسم الحقول والعمر و foodFoods المفضلة. يجب أن تكون أنواعها متوافقة مع تلك الموجودة في "مخطط الشخص". ثم استدعاء الأسلوب document.save () على مثيل المستند الذي تم إرجاعه. تمرير إليه رد اتصال باستخدام عقدة العقد. هذا نمط شائع ، كل طرق CRUD التالية تأخذ وظيفة رد اتصال مثل هذا كوسيطة أخيرة. +/* Example */ +// ... +person.save(function(err, data) { +// ...do your stuff here... +}); +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن ينجح إنشاء عنصر db وحفظه + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/create-and-save-person'').then(data => { assert.isString(data.name, ''"item.name" should be a String''); assert.isNumber(data.age, ''28'', ''"item.age" should be a Number''); assert.isArray(data.favoriteFoods, ''"item.favoriteFoods" should be an Array''); assert.equal(data.__v, 0, ''The db item should be not previously edited''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-many-records-with-model.create.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-many-records-with-model.create.arabic.md new file mode 100644 index 0000000000..73407dc878 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/create-many-records-with-model.create.arabic.md @@ -0,0 +1,41 @@ +--- +id: 587d7fb7367417b2b2512c0a +title: Create Many Records with model.create() +localeTitle: إنشاء العديد من السجلات باستخدام model.create () +challengeType: 2 +--- + +## Description +
+بعض الأحيان تحتاج إلى إنشاء العديد من الأمثلة من النماذج الخاصة بك ، على سبيل المثال عند إنشاء قاعدة بيانات بالبيانات الأولية. تأخذ مجموعة Model.create () مصفوفة من الكائنات مثل [{name: 'John'، ...}، {...}، ...] باعتبارها أول وسيطة ، وحفظها كلها في db. قم بإنشاء العديد من الأشخاص باستخدام Model.create () ، باستخدام الدالة arrayOfPeople. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن ينجح إنشاء العديد من عناصر db في وقت واحد + testString: 'getUserInput => $.ajax({url: getUserInput(''url'') + ''/_api/create-many-people'', type: ''POST'', contentType:''application/json'', data: JSON.stringify([{name: ''John'', age: 24, favoriteFoods: [''pizza'', ''salad'']}, {name: ''Mary'', age: 21, favoriteFoods: [''onions'', ''chicken'']}])}).then(data => { assert.isArray(data, ''the response should be an array''); assert.equal(data.length, 2, ''the response does not contain the expected number of items''); assert.equal(data[0].name, ''John'', ''The first item is not correct''); assert.equal(data[0].__v, 0, ''The first item should be not previously edited''); assert.equal(data[1].name, ''Mary'', ''The second item is not correct''); assert.equal(data[1].__v, 0, ''The second item should be not previously edited''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-many-documents-with-model.remove.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-many-documents-with-model.remove.arabic.md new file mode 100644 index 0000000000..67e60a63f1 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-many-documents-with-model.remove.arabic.md @@ -0,0 +1,42 @@ +--- +id: 587d7fb8367417b2b2512c11 +title: Delete Many Documents with model.remove() +localeTitle: حذف العديد من المستندات باستخدام model.remove () +challengeType: 2 +--- + +## Description +
+Model.remove () مفيد لحذف جميع الوثائق التي تطابق معايير محددة. احذف جميع الأشخاص الذين يكون اسمهم "Mary" ، باستخدام Model.remove (). قم بنقله إلى مستند استعلام باستخدام مجموعة حقول "الاسم" ، وبالطبع رد اتصال. +ملاحظة: لا يقوم Model.remove () بإرجاع المستند المحذوف ، ولكن كائن JSON يحتوي على نتيجة العملية وعدد العناصر المتأثرة. لا تنسَ تمريرها إلى معاودة الاتصال () ، لأننا نستخدمها في الاختبارات. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن ينجح حذف العديد من العناصر في وقت واحد + testString: 'getUserInput => $.ajax({url: getUserInput(''url'') + ''/_api/remove-many-people'', type: ''POST'', contentType:''application/json'', data: JSON.stringify([{name: ''Mary'', age: 16, favoriteFoods: [''lollipop'']}, {name: ''Mary'', age: 21, favoriteFoods: [''steak'']}])}).then(data => { assert.isTrue(!!data.ok, ''The mongo stats are not what expected''); assert.equal(data.n, 2, ''The number of items affected is not what expected''); assert.equal(data.count, 0, ''the db items count is not what expected''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-one-document-using-model.findbyidandremove.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-one-document-using-model.findbyidandremove.arabic.md new file mode 100644 index 0000000000..005cb3b5e5 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/delete-one-document-using-model.findbyidandremove.arabic.md @@ -0,0 +1,41 @@ +--- +id: 587d7fb8367417b2b2512c10 +title: Delete One Document Using model.findByIdAndRemove +localeTitle: حذف مستند واحد باستخدام model.findByIdAndRemove +challengeType: 2 +--- + +## Description +
+احذف شخصًا واحدًا من _id. يجب استخدام أحد الأساليب findByIdAndRemove () أو findOneAndRemove (). هم مثل أساليب التحديث السابقة. يمرر المستند الذي تمت إزالته إلى cb. كالعادة ، استخدم الدالة argument personId كمفتاح بحث. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن ينجح حذف عنصر + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/_api/remove-one-person'', {name:''Jason Bourne'', age: 36, favoriteFoods:[''apples'']}).then(data => { assert.equal(data.name, ''Jason Bourne'', ''item.name is not what expected''); assert.equal(data.age, 36, ''item.age is not what expected''); assert.deepEqual(data.favoriteFoods, [''apples''], ''item.favoriteFoods is not what expected''); assert.equal(data.__v, 0); assert.equal(data.count, 0, ''the db items count is not what expected''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/install-and-set-up-mongoose.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/install-and-set-up-mongoose.arabic.md new file mode 100644 index 0000000000..36489ee97d --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/install-and-set-up-mongoose.arabic.md @@ -0,0 +1,45 @@ +--- +id: 587d7fb6367417b2b2512c06 +title: Install and Set Up Mongoose +localeTitle: تثبيت وإعداد النمس +challengeType: 2 +--- + +## Description +
+إضافة mongodb والنمس إلى package.json المشروع. ثم تتطلب النمس. قم بتخزين URI قاعدة بيانات قاعدة البيانات الخاصة بك في ملف .env الخاص كـ MONGO_URI. الاتصال بقاعدة البيانات باستخدام mongoose.connect ( ) +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: يجب أن تكون "" mongodb "التبعية في package.json" + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/file/package.json'').then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, ''mongodb''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب أن يكون التبعية "النمس" في package.json " + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/file/package.json'').then(data => { var packJson = JSON.parse(data); assert.property(packJson.dependencies, ''mongoose''); }, xhr => { throw new Error(xhr.responseText); })' + - text: يجب ربط "النمس" بقاعدة بيانات " + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/is-mongoose-ok'').then(data => {assert.isTrue(data.isMongooseOk, ''mongoose is not connected'')}, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.arabic.md new file mode 100644 index 0000000000..132e1393dd --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-classic-updates-by-running-find-edit-then-save.arabic.md @@ -0,0 +1,43 @@ +--- +id: 587d7fb8367417b2b2512c0e +title: 'Perform Classic Updates by Running Find, Edit, then Save' +localeTitle: "قم بإجراء التحديثات الكلاسيكية عن طريق تشغيل بحث ، تحرير ، ثم حفظ" +challengeType: 2 +--- + +## Description +
+في الأيام الخوالي ، كان هذا هو ما تحتاج إلى القيام به إذا كنت ترغب في تحرير مستند وتكون قادرًا على استخدامه بطريقة ما ، على سبيل المثال إرساله مرة أخرى في استجابة الخادم. لدى Mongoose طريقة تحديث مخصصة: Model.update (). يتم ربطه بالسائق المنخفض المستوى من طراز mongo. يمكنه تحرير الكثير من الوثائق التي تتطابق مع معايير معينة ، لكنه لا يرسل الوثيقة المحدثة ، فقط رسالة "الحالة". وعلاوة على ذلك ، فإنه يجعل عمليات التحقق من صحة النموذج صعبة ، لأنه فقط يدعو مباشرة سائق المونجو. +البحث عن شخص بواسطة _id (استخدام أي من الأساليب المذكورة أعلاه) مع person المعلمة كمفتاح البحث. أضف "الهامبرغر" إلى قائمة منتجاتها المفضلة (يمكنك استخدام Array.push ()). ثم - داخل البحث عن معاودة الاتصال - حفظ () الشخص المحدثة. +[*] تلميح: قد يكون هذا أمرًا صعبًا إذا كنت قد أعلنت في المخطط الخاص بك أن الأطعمة المفضلة هي صفيف ، دون تحديد النوع (أي [السلسلة]). في ذلك casefavorite السلع الافتراضية إلى نوع مختلط ، ويجب عليك وضع علامة عليه يدويًا كما تم تحريره باستخدام document.markModified ('edited-field'). (http://mongoosejs.com/docs/schematypes.html - # مختلط) +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: البحث عن تحرير عنصر يجب أن تنجح + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/_api/find-edit-save'', {name:''Poldo'', age: 40, favoriteFoods:[''spaghetti'']}).then(data => { assert.equal(data.name, ''Poldo'', ''item.name is not what expected''); assert.equal(data.age, 40, ''item.age is not what expected''); assert.deepEqual(data.favoriteFoods, [''spaghetti'', ''hamburger''], ''item.favoriteFoods is not what expected''); assert.equal(data.__v, 1, ''The item should be previously edited''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-new-updates-on-a-document-using-model.findoneandupdate.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-new-updates-on-a-document-using-model.findoneandupdate.arabic.md new file mode 100644 index 0000000000..ac9e610342 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/perform-new-updates-on-a-document-using-model.findoneandupdate.arabic.md @@ -0,0 +1,43 @@ +--- +id: 587d7fb8367417b2b2512c0f +title: Perform New Updates on a Document Using model.findOneAndUpdate() +localeTitle: إجراء تحديثات جديدة على مستند باستخدام model.findOneAndUpdate () +challengeType: 2 +--- + +## Description +
+الإصدارات الحديثة من النمس لها طرق لتبسيط تحديث الوثائق. تتصرف بعض الميزات الأكثر تقدمًا (أي خطافات ما قبل / النشر والتحقق من الصحة) بشكل مختلف مع هذا الأسلوب ، لذلك لا تزال الطريقة الكلاسيكية مفيدة في العديد من المواقف. يمكن استخدام findByIdAndUpdate () عند البحث باستخدام Id. +البحث عن شخص حسب الاسم وتعيين سنها إلى 20. استخدم الدالة parameter nameName كمفتاح بحث. +تلميح: نريد منك إرجاع المستند الذي تم تحديثه. للقيام بذلك ، تحتاج إلى تمرير مستند الخيارات {جديد: true} كوسيطة 3 للبحث عن OneOndUpdate (). بشكل افتراضي ، ترجع هذه الطرق الكائن غير المعدل. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: findOneAndUpdate يجب أن ينجح عنصر + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/_api/find-one-update'', {name:''Dorian Gray'', age: 35, favoriteFoods:[''unknown'']}).then(data => { assert.equal(data.name, ''Dorian Gray'', ''item.name is not what expected''); assert.equal(data.age, 20, ''item.age is not what expected''); assert.deepEqual(data.favoriteFoods, [''unknown''], ''item.favoriteFoods is not what expected''); assert.equal(data.__v, 0, ''findOneAndUpdate does not increment version by design !!!''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.find-to-search-your-dataarabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.find-to-search-your-dataarabic.md new file mode 100644 index 0000000000..9d6874d687 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.find-to-search-your-dataarabic.md @@ -0,0 +1,42 @@ +--- +id: 587d7fb7367417b2b2512c0b +title: Use model.find() to Search Your Database +localeTitle: استخدم model.find () للبحث في قاعدة البيانات الخاصة بك +challengeType: 2 +--- + +## Description +
+البحث عن جميع الأشخاص الذين لديهم اسم معين ، باستخدام Model.find () -> [شخص] +في أبسط استخدام له ، يقبل Model.find () مستند استعلام (كائن JSON) كالوسيطة الأولى ، ثم رد اتصال. تقوم بإرجاع مجموعة من التطابقات. وهو يدعم مجموعة واسعة للغاية من خيارات البحث. التحقق من ذلك في المستندات. استخدم الوسيطة function personName كمفتاح البحث. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: البحث عن العناصر المقابلة لمعايير يجب أن تنجح + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/_api/find-all-by-name'', {name: ''r@nd0mN4m3'', age: 24, favoriteFoods: [''pizza'']}).then(data => { assert.isArray(data, ''the response should be an Array''); assert.equal(data[0].name, ''r@nd0mN4m3'', ''item.name is not what expected''); assert.equal(data[0].__v, 0, ''The item should be not previously edited''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findbyid-to-search-your-database-by-id.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findbyid-to-search-your-database-by-id.arabic.md new file mode 100644 index 0000000000..c3f6b7943e --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findbyid-to-search-your-database-by-id.arabic.md @@ -0,0 +1,41 @@ +--- +id: 587d7fb7367417b2b2512c0d +title: Use model.findById() to Search Your Database By _id +localeTitle: استخدم model.findById () للبحث في قاعدة البيانات الخاصة بك بواسطة _id +challengeType: 2 +--- + +## Description +
+عند حفظ مستند ، يقوم mongodb تلقائيًا بإضافة حقل _id ، وتعيينه إلى مفتاح أبجدي رقمي فريد. البحث عن طريق _id هو عملية متكررة للغاية ، لذلك يوفر النمس طريقة مخصصة لذلك. ابحث عن الشخص (فقط !!) الذي لديه _id محدد ، باستخدام Model.findById () -> الشخص. استخدم الوسيطة function personId كمفتاح البحث. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: العثور على عنصر من خلال معرف يجب أن تنجح + testString: 'getUserInput => $.get(getUserInput(''url'') + ''/_api/find-by-id'').then(data => { assert.equal(data.name, ''test'', ''item.name is not what expected''); assert.equal(data.age, 0, ''item.age is not what expected''); assert.deepEqual(data.favoriteFoods, [''none''], ''item.favoriteFoods is not what expected''); assert.equal(data.__v, 0, ''The item should be not previously edited''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +
diff --git a/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findone-to-return-a-single-matching-document-from-your-database.arabic.md b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findone-to-return-a-single-matching-document-from-your-database.arabic.md new file mode 100644 index 0000000000..57dd95d5c1 --- /dev/null +++ b/curriculum/challenges/arabic/05-apis-and-microservices/mongodb-and-mongoose/use-model.findone-to-return-a-single-matching-document-from-your-database.arabic.md @@ -0,0 +1,41 @@ +--- +id: 587d7fb7367417b2b2512c0c +title: Use model.findOne() to Return a Single Matching Document from Your Database +localeTitle: استخدم model.findOne () لإرجاع مستند مطابقة مفردة من قاعدة البيانات الخاصة بك +challengeType: 2 +--- + +## Description +
+يتصرف model.findOne () مثل .find () ، ولكنه يقوم بإرجاع مستند واحد فقط (وليس صفيف) ، حتى إذا كان هناك عدة عناصر. من المفيد بشكل خاص عند البحث عن طريق الخصائص التي أعلنت أنها فريدة من نوعها. البحث عن شخص واحد فقط لديه طعام معين في المفضلة لها ، وذلك باستخدام Model.findOne () -> شخص. استخدم الوسيطة الدالة الغذائية كمفتاح بحث. +
+ +## Instructions +
+ +
+ +## Tests +
+ +```yml +tests: + - text: العثور على عنصر واحد يجب أن تنجح + testString: 'getUserInput => $.post(getUserInput(''url'') + ''/_api/find-one-by-food'', {name: ''Gary'', age: 46, favoriteFoods: [''chicken salad'']}).then(data => { assert.equal(data.name, ''Gary'', ''item.name is not what expected''); assert.deepEqual(data.favoriteFoods, [''chicken salad''], ''item.favoriteFoods is not what expected''); assert.equal(data.__v, 0, ''The item should be not previously edited''); }, xhr => { throw new Error(xhr.responseText); })' + +``` + +
+ +## Challenge Seed +
+ +
+ +## Solution +
+ +```js +// solution required +``` +