1
00:00:03,650 --> 00:00:06,464
في الدروس السابقة،

2
00:00:06,464 --> 00:00:08,580
تعلمنا عن عقدة.

3
00:00:08,580 --> 00:00:13,215
لقد رأينا أيضا كيف يمكن استخدام عقدة لإعداد خادم ويب.

4
00:00:13,215 --> 00:00:20,460
الآن مصممو العقدة أبقوا عمدا عقدة صغيرة مع عدد قليل من

5
00:00:20,460 --> 00:00:24,480
وحدات التعليمات البرمجية بحيث يتمكنوا من ترك الأمر

6
00:00:24,480 --> 00:00:29,730
للمطورين من طرف ثالث للتوصل إلى حلول مبتكرة للمشاكل.

7
00:00:29,730 --> 00:00:37,590
لذلك بمجرد إصدار Node، بدأ عدد من مطوري الطرف الثالث في تصميم

8
00:00:37,590 --> 00:00:45,875
وإطلاق وحدات خارجية مثيرة للاهتمام يمكن تشغيلها على رأس منصة Node.

9
00:00:45,875 --> 00:00:50,030
الآن كنت قد رأيت عددا من وحدات عقدة التي يمكن

10
00:00:50,030 --> 00:00:54,185
استخدامها لتطوير الواجهة الأمامية في الدورات السابقة.

11
00:00:54,185 --> 00:00:59,240
الآن في هذه الدورة نحن نبحث في تطوير من جانب الخادم وعلى جانب الخادم،

12
00:00:59,240 --> 00:01:03,020
واحدة من وحدات عقدة الطرف الثالث الأكثر شعبية أو

13
00:01:03,020 --> 00:01:08,720
أطر لبناء خوادم HTTP هو Express.

14
00:01:08,720 --> 00:01:11,480
دعونا ننظر إلى بعض تفاصيل Express في

15
00:01:11,480 --> 00:01:14,345
هذه المحاضرة وبعد ذلك سوف نستفيد من Express

16
00:01:14,345 --> 00:01:21,725
لبناء خادم يخدم واجهة برمجة تطبيقات REST طوال بقية هذه الدورة.

17
00:01:21,725 --> 00:01:25,670
أولاً، ما هو Express؟

18
00:01:25,670 --> 00:01:30,355
Express هو

19
00:01:30,355 --> 00:01:37,519
إطار سريع، غير مؤكد، الحد الأدنى الذي يعمل على رأس Node.js ويدعم تطوير الويب.

20
00:01:37,519 --> 00:01:42,570
هذا هو التعريف الذي اقترضت من expressjs.com،

21
00:01:42,570 --> 00:01:48,025
الموقع الذي تتوفر فيه وثائق Express ذات الصلة بالنسبة لنا.

22
00:01:48,025 --> 00:01:53,769
الآن إكسبريس يسمح لك لتطوير تطبيق ويب، تطبيق من

23
00:01:53,769 --> 00:02:02,385
جانب الخادم التي سوف تخدم المحتوى للاستهلاك من قبل الواجهة الأمامية لدينا.

24
00:02:02,385 --> 00:02:07,730
يوفر Express مجموعة قوية من الميزات التي سنقوم باستكشافها

25
00:02:07,730 --> 00:02:13,610
بمزيد من التفصيل من خلال بقية الدروس في هذه الدورة.

26
00:02:13,610 --> 00:02:17,425
التعبير عن نفسه كما قلت هو إطار الحد الأدنى،

27
00:02:17,425 --> 00:02:21,020
ويوفر Express أيضا وسيلة لتوسيع وإضافة

28
00:02:21,020 --> 00:02:25,465
وظائف إلى Express من خلال البرامج الوسيطة لطرف ثالث.

29
00:02:25,465 --> 00:02:31,830
هذا يمتد وظائف Express ويضيف في المزيد من الميزات كما هو مطلوب.

30
00:02:31,830 --> 00:02:38,750
لذلك، يمكنك إنشاء خادم الويب الخاص بك باستخدام العديد من البرامج الوسيطة التابعة

31
00:02:38,750 --> 00:02:46,070
لجهة خارجية كما هو مطلوب لتلبية احتياجات خادم الويب الخاص بك الذي تقوم بتصميمه.

32
00:02:46,070 --> 00:02:52,130
سنلقي نظرة على بعض الأمثلة على البرامج الوسيطة لطرف ثالث في هذا الدرس،

33
00:02:52,130 --> 00:02:58,170
وسوف نستكشف أيضًا المزيد من هذه الأمثلة أثناء خضوعنا لبقية الدروس في هذا المساق.

34
00:02:58,170 --> 00:03:01,520
لاستخدام Express في مشروعك، بطبيعة الحال، فإن

35
00:03:01,520 --> 00:03:05,730
الخطوة الأولى هي تثبيت Express وبما أن Express عبارة عن وحدة نمطية،

36
00:03:05,730 --> 00:03:10,940
فإننا نقوم بتثبيته بقول npm install express - save

37
00:03:10,940 --> 00:03:17,145
وهذا من شأنه تثبيت Express في مشروعك المحلي.

38
00:03:17,145 --> 00:03:21,865
سنرى استخدام هذا في التمرين الذي يتبع هذه المحاضرة.

39
00:03:21,865 --> 00:03:25,670
دعونا نتحدث بإيجاز عن الوسيطة Express.

40
00:03:25,670 --> 00:03:28,425
فما هو بالضبط الغرض من الوسيطة؟

41
00:03:28,425 --> 00:03:32,510
توفر البرامج الوسيطة التي يدعمها Express الكثير من

42
00:03:32,510 --> 00:03:38,370
وظائف المكونات الإضافية التي سيتم استخدامها لتحسين تطبيق Express الخاص بك،

43
00:03:38,370 --> 00:03:41,165
وظائف المكونات الإضافية مثل على سبيل المثال

44
00:03:41,165 --> 00:03:45,500
، سننظر إلى برنامج وسيط يسمى Morgan والذي يسمح لك

45
00:03:45,500 --> 00:03:52,490
بطباعة معلومات السجل إلى الشاشة حول الطلبات التي تأتي إلى الخادم الخاص بك.

46
00:03:52,490 --> 00:03:56,494
وبالمثل، سنلقي نظرة على برنامج وسيط آخر يسمى BodyParser،

47
00:03:56,494 --> 00:03:59,090
والذي يسمح لك لتحليل نص

48
00:03:59,090 --> 00:04:02,375
رسالة طلب HTTP الواردة واستخراج

49
00:04:02,375 --> 00:04:06,450
المعلومات منه للاستخدام داخل تطبيق Express الخاص بك.

50
00:04:06,450 --> 00:04:11,395
سنرى استخدام هذه في التمرين التالي.

51
00:04:11,395 --> 00:04:18,455
كما ذكرت، مورغان يقوم بتسجيل المعلومات إلى وحدة التحكم على جانب الخادم،

52
00:04:18,455 --> 00:04:21,645
ومعلومات حول الطلبات الواردة.

53
00:04:21,645 --> 00:04:28,145
وبالمثل، يمكن أن تخدم موارد الويب الثابتة من خادمنا باستخدام Express

54
00:04:28,145 --> 00:04:35,855
static بحيث يخدم هذا المعلومات من مجلد داخل مشروع Express الخاص بنا،

55
00:04:35,855 --> 00:04:39,785
وفي الإعلان عن المشروع يمكنك أن تقول أنني

56
00:04:39,785 --> 00:04:44,690
اسم ملف تسطير سفلي مزدوج واسم دليل تسطير سفلي مزدوج أو dirname الذي

57
00:04:44,690 --> 00:04:48,410
المسار الكامل للملف أو الدليل

58
00:04:48,410 --> 00:04:53,535
للوحدة الحالية وسوف تراني باستخدام ذلك في التمرين.

59
00:04:53,535 --> 00:04:55,640
الآن بعد أن فهمنا قليلاً عن

60
00:04:55,640 --> 00:04:58,695
Express والبرامج الوسيطة التي يستخدمها Express،

61
00:04:58,695 --> 00:05:02,930
دعنا ننظر إلى وحدة Node

62
00:05:02,930 --> 00:05:06,499
لأن هذه هي المرة الأولى التي نواجه فيها وحدات عقدة تابعة لجهة خارجية،

63
00:05:06,499 --> 00:05:10,460
سنلقي نظرة على بعض التفاصيل حول وحدات Node الخاصة بالطرف الثالث، لذا إذا قمنا بفحص

64
00:05:10,460 --> 00:05:15,000
package.json لمعرفة ما هو موجود في ملف package.json،

65
00:05:15,000 --> 00:05:17,920
سننظر أيضًا في إصدار الدلالي.

66
00:05:17,920 --> 00:05:22,550
لذلك عند تحديد إصدار الحزمة التي تستخدمها،

67
00:05:22,550 --> 00:05:31,745
تقوم دائمًا بتحديد الإصدار عن طريق تحديد الإصدار الرئيسي. Minor الإصدار.

68
00:05:31,745 --> 00:05:35,685
لذلك عند تثبيت حزمة،

69
00:05:35,685 --> 00:05:39,230
يتم تحديدها دائمًا بواسطة هذه الأرقام الثلاثة،

70
00:05:39,230 --> 00:05:45,440
الإصدار الرئيسي الذي قد يقدم تغييرات مفككة مما يعني أنه إذا كنت تقوم

71
00:05:45,440 --> 00:05:48,560
بتثبيت إصدار أحدث من الحزمة، فقد لا يكون

72
00:05:48,560 --> 00:05:51,920
متوافقًا تمامًا مع الإصدارات السابقة.

73
00:05:51,920 --> 00:05:55,370
قد يقدم تغييرات كسر حيث قد تحتاج إلى العودة وإصلاح

74
00:05:55,370 --> 00:05:59,905
الشفرة التي قد تكون قد كتبتها في الإصدار السابق من مشروعك.

75
00:05:59,905 --> 00:06:01,790
يقدم الإصدار الثانوي

76
00:06:01,790 --> 00:06:06,385
بعض التغييرات الطفيفة على الحزمة الخاصة بك وقد لا يؤدي إلى كسر التغييرات.

77
00:06:06,385 --> 00:06:14,800
التصحيح سيكون إصلاح الأخطاء التي غالبا ما يتم إصدارها ثم يتم اكتشاف علة صغيرة.

78
00:06:14,800 --> 00:06:21,005
لذلك لا تؤدي التصحيحات عادةً إلى أي تغييرات متفرقة

79
00:06:21,005 --> 00:06:24,395
، وبالتالي يمكنك بسهولة استخدام إصدار أعلى أو إصدار تصحيح أعلى

80
00:06:24,395 --> 00:06:30,215
لحزمة معينة تستخدمها داخل تطبيق Node الخاص بك.

81
00:06:30,215 --> 00:06:33,410
عندما تقوم بتثبيت حزمة، يمكنك تحديد

82
00:06:33,410 --> 00:06:38,465
الإصدار الدقيق للحزمة المراد تثبيتها بقول تثبيت npm،

83
00:06:38,465 --> 00:06:40,460
على سبيل المثال إذا كنت ترغب في تثبيت

84
00:06:40,460 --> 00:06:44,630
الإصدار 4.0.0 من Express، فيمكنك قول express @4 .0.0.

85
00:06:44,630 --> 00:06:51,635
لذلك أنت تحدد صراحة أي إصدار من الحزمة المراد تثبيتها.

86
00:06:51,635 --> 00:06:55,630
إذا كنت على ما يرام مع إصدار تصحيح أعلى مستوى،

87
00:06:55,630 --> 00:07:02,590
فستقول npm install express@"~ 4.0.0 إذا كان

88
00:07:02,590 --> 00:07:07,190
إصدار ثانوي أعلى من الحزمة

89
00:07:07,190 --> 00:07:13,125
مقبولًا، فستقول @ واسم الحزمة.

90
00:07:13,125 --> 00:07:17,210
الآن يتم حفظ هذا النوع من المعلومات أيضا في ملف package.json،

91
00:07:17,210 --> 00:07:20,070
سنقوم بزيارة بسرعة إلى حزمة ملف json

92
00:07:20,070 --> 00:07:23,750
حيث ستلاحظ بعض هذه المعلومات التي يتم حفظها.

93
00:07:23,750 --> 00:07:27,575
الآن عند القيام بالتمرين الذي يتبع هذه المحاضرة

94
00:07:27,575 --> 00:07:31,845
سترى هذا في ملف package.json.

95
00:07:31,845 --> 00:07:38,325
سيكون ذلك نتيجة إكمال التمرين الذي يتبع هذه المحاضرة.

96
00:07:38,325 --> 00:07:43,230
في التمرين سنقوم ببناء خادم ويب بسيط باستخدام Express.

97
00:07:43,230 --> 00:07:46,570
الآن اسمحوا لي أن يأخذك من خلال جولة سريعة من package.json

98
00:07:46,570 --> 00:07:50,470
لتوضيح بعض المعلومات في package.json.

99
00:07:50,470 --> 00:07:56,530
حتى في ملف package.json ستلاحظ هذه المعلومات هنا،

100
00:07:56,530 --> 00:08:00,525
هذه الخاصية لجسون لدينا التي يتم تخزينها هنا تسمى التبعيات.

101
00:08:00,525 --> 00:08:04,250
التبعيات هي المكان

102
00:08:04,250 --> 00:08:07,400
الذي ستحدد فيه وحدات الطرف الثالث الإضافية

103
00:08:07,400 --> 00:08:10,700
التي يعتمد عليها مشروع عقدة معين،

104
00:08:10,700 --> 00:08:15,230
بحيث يمكنك أن ترى هنا نقول أن هذا المشروع يعتمد على Express

105
00:08:15,230 --> 00:08:20,540
و Morgan ونلاحظ على وجه الخصوص كيف يتم تحديد هذه المعلومات هنا.

106
00:08:20,540 --> 00:08:25,715
لذلك هذا هو ^4.16.3 مما يعني أن هذا

107
00:08:25,715 --> 00:08:31,380
سيعمل مع أي إصدار 4.16.3 أو أعلى.

108
00:08:31,380 --> 00:08:35,725
يمكنك استخدام إصدار ثانوي أعلى مستوى وسيظل هذا المشروع على ما

109
00:08:35,725 --> 00:08:40,970
يرام معه وبالمثل بالنسبة لمورغان حددنا المعلومات هنا.

110
00:08:40,970 --> 00:08:47,345
لذلك يتم إضافة هذه المعلومات الإضافية إلى ملف package.json كلما قمت

111
00:08:47,345 --> 00:08:55,035
بتثبيت npm وتقول - حفظ العلم لتثبيت npm.

112
00:08:55,035 --> 00:09:02,040
الآن، ستلاحظ أيضًا أنني قمت بإنشاء ملف.gitignore هنا وداخل

113
00:09:02,040 --> 00:09:09,770
ملف.gitignore الذي حددته أن git يجب أن يتجاهل مجلد وحدات العقدة.

114
00:09:09,770 --> 00:09:13,275
إذن ما هو موجود بالضبط في مجلد وحدات العقدة؟

115
00:09:13,275 --> 00:09:20,704
إذا قمت بتثبيت وحدات خارجية في تطبيق Node الخاص بك،

116
00:09:20,704 --> 00:09:26,270
فسيتم حفظ جميع وحدات الطرف الثالث هذه في مجلد وحدات Node هنا،

117
00:09:26,270 --> 00:09:31,420
لذلك سترى داخل مشروعك أنه تم إنشاء مجلد وحدات Node هنا.

118
00:09:31,420 --> 00:09:34,550
وإلقاء نظرة على مجلد وحدات العقدة سترى

119
00:09:34,550 --> 00:09:38,495
مجموعة كاملة من الحزم التي تم تثبيتها.

120
00:09:38,495 --> 00:09:40,490
الآن تم تثبيت كل هذه لأن

121
00:09:40,490 --> 00:09:43,250
تثبيت Express و Express بدوره يعتمد على

122
00:09:43,250 --> 00:09:50,550
بعض الحزم الأخرى المطلوبة حتى يتم تثبيت كل تلك أيضا هنا بشكل افتراضي. على

123
00:09:50,550 --> 00:09:55,850
وجه الخصوص، اسمحوا لي أيضا أن ألفت انتباهكم إلى حزمة إكسبريس هنا،

124
00:09:55,850 --> 00:09:59,045
لذلك إذا ذهبت إلى حزمة إكسبريس سترى

125
00:09:59,045 --> 00:10:02,470
معلومات إضافية يتم تخزينها في حزمة إكسبريس،

126
00:10:02,470 --> 00:10:06,435
لذلك منظور مؤشر أيضا لأن إكسبريس نفسه هو

127
00:10:06,435 --> 00:10:10,924
وحدة عقدة سترى

128
00:10:10,924 --> 00:10:14,015
ملف package.json داخل إكسبريس أيضا الذي يحتوي على

129
00:10:14,015 --> 00:10:19,865
معلومات إضافية والتي بالطبع مفصلة جدا هناك، من

130
00:10:19,865 --> 00:10:25,280
الصعب بالنسبة لنا أن نفهم ولكن لاحظ على وجه الخصوص

131
00:10:25,280 --> 00:10:31,330
أن إكسبريس نفسه يعتمد على العديد من وحدات عقدة أخرى هنا.

132
00:10:31,330 --> 00:10:34,820
وهذا هو السبب في أن جميع وحدات العقدة الأخرى هذه

133
00:10:34,820 --> 00:10:38,250
قد تم تثبيتها أيضا في مجلد وحدات العقدة.

134
00:10:38,250 --> 00:10:40,160
لذلك عند تثبيت Express،

135
00:10:40,160 --> 00:10:45,020
سيؤدي ذلك على الفور أيضًا إلى تشغيل جميع تبعياته أيضًا ليتم تثبيتها نظرًا لأن

136
00:10:45,020 --> 00:10:50,980
Express سيتطلب وحدات Node الأخرى للقيام بعملها.

137
00:10:50,980 --> 00:10:54,590
أيضا، داخل إكسبريس أيضا سترى ملف index.js.

138
00:10:54,590 --> 00:11:00,125
لذلك هذه هي نقطة البداية لوحدة عقدة إكسبريس نفسها

139
00:11:00,125 --> 00:11:05,690
ونلاحظ على وجه الخصوص أن ملف index.js ببساطة يقول module.exports تتطلب ليب إكسبريس.

140
00:11:05,690 --> 00:11:12,645
لذا فإن الشفرة الفعلية لوحدة Express نفسها موجودة داخل مشروع lib هذا،

141
00:11:12,645 --> 00:11:16,225
مجلد lib هنا ويمكنك رؤية التفاصيل.

142
00:11:16,225 --> 00:11:20,900
حتى إذا كنت غريبة لمعرفة تفاصيل اكسبرس نفسها يمكنك الذهاب والنظر

143
00:11:20,900 --> 00:11:25,560
في هناك ولكن مرة أخرى هذا قد يكون قليلا أكثر من اللازم بالنسبة لك في هذه اللحظة.

144
00:11:25,560 --> 00:11:31,815
في الوقت الحالي، اقبل حقيقة أن Express ستقوم بعملها كما هو متوقع.

145
00:11:31,815 --> 00:11:38,450
ولكن اعتقدت أنه سيكون من تجربة مثيرة للاهتمام لزيارة مجلد وحدة العقدة

146
00:11:38,450 --> 00:11:45,435
للنظر في بنية وحدة عقدة طرف ثالث معين في مزيد من التفاصيل.

147
00:11:45,435 --> 00:11:48,530
أيضا، ستلاحظ أن هناك ملف آخر

148
00:11:48,530 --> 00:11:52,010
هنا يسمى package-lock.json مثبت.

149
00:11:52,010 --> 00:11:56,690
الآن يتم تثبيت هذا من قبل الإصدارات الأحدث من npm.

150
00:11:56,690 --> 00:12:01,190
يتم إنشاء ملف package-lock.json تلقائيًا بواسطة

151
00:12:01,190 --> 00:12:06,259
npm الذي يخزن معلومات حول

152
00:12:06,259 --> 00:12:10,265
الشجرة الدقيقة التي تم إنشاؤها عند تثبيت

153
00:12:10,265 --> 00:12:14,630
وحدات Node الأخرى وهذا مفيد جدًا عندما

154
00:12:14,630 --> 00:12:22,660
تحتاج إلى تثبيت وحدات Node في موقع آخر.

155
00:12:22,660 --> 00:12:27,620
على سبيل المثال، إذا قمت بتنزيل مستودع Git

156
00:12:27,620 --> 00:12:32,865
وحاولت إعادة إنشاء هذا المشروع على جهاز كمبيوتر آخر،

157
00:12:32,865 --> 00:12:35,930
فستكتب ببساطة تثبيت npm على المطالبة وسيطلب

158
00:12:35,930 --> 00:12:39,050
ذلك من تطبيق Node الخاص بك

159
00:12:39,050 --> 00:12:45,810
لتثبيت كل ما تم تحديده في التبعيات هنا نيابة عنك.

160
00:12:45,810 --> 00:12:53,335
أثناء إنشاء أن package-lock.json يخزن معلومات إضافية يستخدمها

161
00:12:53,335 --> 00:13:01,805
npm لإجراء التثبيت الصحيح لجميع وحدات npm المطلوبة.

162
00:13:01,805 --> 00:13:05,090
الآن في الوقت الحالي لا داعي للقلق بشأن تفاصيل

163
00:13:05,090 --> 00:13:08,290
ما هو موجود داخل ملف package-lock.json.

164
00:13:08,290 --> 00:13:15,550
بهذا، نكمل هذا الدرس حيث قمنا بفحص بعض التفاصيل حول Express.