بعد تثبيت العقدة (تنزيل) ، قم بإنشاء دليل على جهازك وابدأ تطبيقك الأول.
$ mkdir hello-world
في هذا الدليل ، ستقوم بتحديد "الحزمة" للتطبيق ، والتي لا تختلف عن أي حزمة عقدة أخرى. يحدد ملف JSON في دليل الملف بشكل واضح التبعية. يمكنك استخدام أمر NPM للحصول على أحدث إصدار من Express ، والذي ترغب في القيام به ، بدلاً من تثبيت إصدار آخر غير "3.x" لمنع أي مفاجآت غير معروفة.
{"name": "Hello-World" ، "Description": "Hello World Test App" ، "الإصدار": "0.0.1" ، "Private": True ، "Rependencies": {"Express": "3.x"}}الآن ، لديك حزمة. في هذا الدليل ، يمكنك استخدام NPM (1) لتثبيت هذا التبعية ، في هذه الحالة تحتاج فقط إلى إدخال:
تثبيت $ NPM
بمجرد الانتهاء من NPM ، سيكون لديك Express 3.x تعتمد عليه في دليل /node_modules. يمكنك التحقق من ذلك باستخدام NPM LS ، تمامًا مثل شجرة Express وتبعياتها الموضحة في مقتطف الكود التالي.
$ npm [email protected] /private /tmp└┬ [email protected] ├ [email protected] ├ [email protected] │ ├ ├ [email protected] │ │ ├ [email protected] │ │ ├ [email protected] └ [email protected] ├ [email protected] ├ [email protected] ├ [email protected] [email protected] └ [email protected]
الآن قم بإنشاء التطبيق نفسه! قم بإنشاء ملف يسمى app.js أو server.js ، بغض النظر عن الموقع الذي تريده ، وقدم Express ، ثم استخدم Express () لإنشاء تطبيق جديد:
var express = require ('express') ؛ var app = express () ؛يمكن أن تبدأ مثيلات التطبيق الجديدة في تحديد الطرق من خلال app.verb () ، وفي هذه الحالة ، تستجيب لطلب "GET/" عبر سلسلة "Hello World". REQ و RES هما نفس كائنات العقدة التي توفرها لك ، لذلك يمكنك استدعاء Res.Pipe () ، و req.on ("البيانات" ، ورد الاتصال) وغيرها من الأشياء التي ستفعلها والتي لا علاقة لها بـ Express.
يعزز Express هذه الكائنات لتزويدك بواجهات عالية المستوى مثل Res.Send () ، بالإضافة إلى إضافة طول المحتوى لك:
app.get ('/hello.txt' ، function (req ، res) {res.Send ('hello world') ؛}) ؛الآن اتصل بالطريقة app.listen () للاتصال لربط والاستماع ، وقبول نفس المعلمات مثل net.server #listen ():
var server = app.listen (3000 ، function () {console.log ('الاستماع على المنفذ ٪ d' ، server.address (). port) ؛}) ؛استخدم Express (1) لإنشاء التطبيق
يحافظ فريق Express على مولد مشروع مناسب يدعى Express-Generator (1). إذا قمت بتثبيت المولد السريع على مستوى العالم باستخدام NPM ، فيمكنك الوصول إليه من أي مكان على جهاز الكمبيوتر الخاص بك:
$ NPM تثبيت -gp إكسبريس
توفر هذه الأداة طريقة سهلة للحصول على إطار عمل للتطبيق ، ولكن مع نطاق محدود ، على سبيل المثال ، فإنها تدعم فقط عدد قليل من محركات القالب ، والتعبير عن نفسها تدعم في الواقع بناء أي قوالب إطار عمل على شبكة الإنترنت للعقدة. يمكنك مشاهدته من خلال المساعدة:
الاستخدام: Express [خيارات] الخيارات: -H ، -HELP معلومات استخدام الإخراج -V ، -إخراج رقم الإصدار -E ، -Ejs إضافة دعم محرك EJS (الافتراضيات إلى Jade) -H ، -Hogan Add Hogan.js Engine Support -C ، -For -for -for add
إذا كنت ترغب في إنشاء تطبيق مدعوم في أي حال ، تحتاج فقط إلى تنفيذ ::
$ express -css stylus myappcreate: myappcreate: myapp/package.jsoncreate: myapp/app.jscreate: myapp/publiccreate: myapp/public/javaScriptscreate: myapp/public/meachecreate: myapp/public/stylesheetscreate myapp/views/index.jadecreate: myapp/views/layout.jadeinstall التبعيات: $ cd myapp && npm installrun التطبيق: $ debug = myapp app
مثل أي تطبيق عقدة آخر ، يجب عليك تثبيت التبعيات التالية:
ثم دعونا نبدأ.
$ NPM البدء
هذا هو كل ما تحتاجه للحصول على تطبيق بسيط وتشغيله. تذكر أن Express غير مرتبط بأي بنية دليل محددة ، فهذه مجرد دليل لك. يمكن عرض اختيار بنية التطبيق في مستودع GitHub.
معالجة الخطأ
تشبه التعريفات في معالجة الأخطاء الوسيطة عن البرامج الوسيطة العادية ، ولكن يجب تحديد 4 معلمات ، وهو توقيع الوظيفة (ERR ، REQ ، RES ، التالي):
app.use (function (err ، req ، res ، next) {console.error (err.stack) ؛ res.send (500 ، 'شيء ما كسر!') ؛}) ؛على الرغم من أن الأخطاء القسرية معالجة الوسيطة لا يتم تعريفها عادة في النهاية ، بعد app.use () ، يبدو أن مكالمته مثل هذا:
var bodyparser = require ('body-parser') ؛ var methodoverride = require ('method-override') ؛ app.use (bodyparser ()) ؛ app.use (methodoverride ()) ؛ app.use (app.router) ؛ app.use (err ، req ، res ، revide) {logic}) ؛الاستجابة في هذه الوسيطة تعسفية تماما. قد ترغب في الرد على صفحة خطأ HTML أو رسالة بسيطة أو سلسلة JSON أو أي استجابة أخرى تريدها.
لإنشاء إطار عمل منظم وعالي المستوى ، يمكنك تحديد العديد من هذه الأخطاء في التعامل مع البرامج الوسيطة ، تمامًا كما ستحدد البرامج الوسيطة العادية. على سبيل المثال ، لنفترض أنك تريد تحديد معالج الأخطاء لطلب XHR ، بالإضافة إلى ذلك ، ما قد تفعله هو على النحو التالي:
var bodyparser = require ('body-parser') ؛ var methodoverride = required ('method-override') ؛ app.use (bodyparser ()) ؛ app.use (methodoverride ()) ؛ app.use (app.Router) ؛ app.use (logerrors) ؛ app.use (clienterrorHandler) ؛ app.use (errorHandler) ؛في LogerRors بشكل عام ، يمكنك كتابة الطلبات ورسائل الخطأ إلى Stderr أو Loggly أو خدمات مماثلة:
دالة logerrors (err ، req ، res ، next) {console.error (err.stack) ؛ التالي (ERR) ؛}يتم عرض تعريف ClienterRorHandler أدناه ، لاحظ أنه سيتم تمرير هذا الخطأ بشكل صريح إلى الخط التالي.
Function ClientErrorHandler (err ، req ، res ، next) {if (req.xhr) {res.send (500 ، {error: '" } آخر {next (err) ؛ }}يمكن تعريف تطبيق ErrorHandler التالي "All-Round" على النحو التالي:
وظيفة errorHandler (err ، req ، res ، next) {res.Status (500) ؛ res.Render ('error' ، {error: err}) ؛}اعتماد المستخدم عبر الإنترنت
يشرح هذا القسم تطبيقًا (صغيرًا) بالتفصيل ويستخدم Redis لتتبع عدد المستخدمين عبر الإنترنت. أولا قم بإنشاء حزمة. يحتوي ملف JSON على مرفقين ، أحدهما لعميل Redis والآخر لـ Express نفسه. تأكد أيضًا من أنك قد قمت بلف redis وتشغيلها من خلال $ redis server.
{"name": "App" ، "الإصدار": "0.0.1" ، "تبعيات": {"Express": "3.x" ، "redis": "*"}}بعد ذلك ، تحتاج إلى إنشاء تطبيق ، واتصال بـ Redis:
var express = require ('express') ؛ var redis = require ('redis') ؛ var db = redis.createClient () ؛ var app = express () ؛تتبع الوسيطة التالية المستخدمين عبر الإنترنت. سنستخدم هنا المجموعة المصنفة حتى نتمكن من الاستعلام عن المستخدمين عبر الإنترنت بواسطة Redis ، والتي لا تستغرق سوى ميلي ثانية. نستخدم الطوابع الزمنية كـ "معيار عبر الإنترنت" للأعضاء. لاحظ أننا هنا نستخدم سلسلة وكيل المستخدم بدلاً من معرف المستخدم المعتاد.
app.use (function (req ، res ، next) {var ua = req.headers ['user-agent']تتمثل البرامج الوسيطة التالية في استخدام ZREVRANGEBYSCORE في اللحظة الأخيرة للحصول على الحد الأقصى لعدد المستخدمين عبر الإنترنت ، ونحصل دائمًا على أحدث المستخدمين عبر الإنترنت ، وحدوده العليا هو الطابع الزمني الحالي ناقص 60000 ميلي ثانية.
app.use (function (req ، res ، next) {var min = 60 * 1000 ؛ var alual = date.now () - min ؛ db.zrevrangeByScore ('Online' ، '+inf' ، alual ، function (err ، user) {if (err) return next (err) ؛ req.online = user ؛ next () ؛}}) ؛}) ؛أخيرًا ، نستخدمه من خلال عنوان URL وربطه بمنفذ! هذا كل شيء ، الوصول إلى هذا التطبيق في متصفح جديد وسترى زيادة في عدد الأشخاص عبر الإنترنت.
app.get ('/' ، function (req ، res) {res.send (req.online.length + 'Users online') ؛}) ؛ app.listen (3000) ؛عكس الوكيل للمعبر
استخدام Express خلف الوكيل العكسي ، مثل الورنيش أو nginx تافهة ، ومع ذلك فهو يتطلب التكوين. من خلال تمكين تطبيق إعداد "الوكيل الثقة".
تمكين هذا الإعداد له بعض الآثار الدقيقة. الأول هو أنه قد يتم تعيين X-Forwarded-Proto عن طريق الوكيل العكسي ، وإخبار التطبيق بأنه HTTPS أو مجرد HTTP بسيط. تنعكس هذه القيمة بواسطة req.protocol.
التغيير الثاني هو أن قيم req.ip و req.ips سوف تملأ قائمة العناوين x-forwarded for.
Debug Express
يستخدم Express وحدة التصحيح داخليًا لتسجيل المعلومات حول مطابقة المسار وأنماط التطبيق. للاطلاع على هذه الرسالة ، ما عليك سوى تعيين متغير بيئة التصحيح للتعبير:*، وبعد بدء التطبيق ، سترى معلومات التصحيح في وحدة التحكم.
$ debug = express:* node ./bin/www
سيقوم تشغيل مثال Hello World هذا بطباعة ما يلي:
Express: تطبيق التمهيد في وضع التطوير +0msexpress: Router محدد Get /Hello.txt +0msexpress: Router تعريف Get /hello.txt +1ms
بالإضافة إلى ذلك ، يستخدم البرنامج الذي تم إنشاؤه عن طريق التعبير عن القابل للتنفيذ (المولد) أيضًا وحدة تصحيح ، والنطاق الافتراضي هو مساحة اسم تصحيح التطبيق.
يمكنك تمكين بيانات التصحيح هذه مع الأمر التالي
$ debug = My-Application Node ./bin/www
لمزيد من المعلومات حول تصحيح الأخطاء ، راجع دليل التصحيح