دليل المبتدئين إلى Node.js (جافا سكريبت من جانب الخادم)
Node.js - بكلمات بسيطة - هو جافا سكريبت من جانب الخادم. لقد تم الحصول على الكثير من الطنانة هذه الأيام. إذا كنت قد سمعت به أو كنت مهتمًا بالتعلم والاستفادة منه - فهذا المنشور يناسبك.
فما هي بالضبط الحاجة إلى استخدام جافا سكريبت في الخادم؟ لتوضيح مفهوم Node.js ، أود مقارنته باللغات العادية من جانب الخادم مثل PHP. يستخدم Node.js إجراء تنفيذ خادم يستند إلى الحدث بدلا من التنفيذ ذات مؤشرات الترابط في PHP.
لشرح ذلك أكثر ، سنتحدث عن فكرة ما هو Node.js جنبا إلى جنب مع بعض استضافة مزود اقتراحات ونصائح التثبيت. معرفة المستوى المتوسط بـ JavaScript و jQuery و Ajax مطلوبة ، ولكننا سنقدم أيضًا أمثلة لك لفهم الأمر برمته أسهل وحتى العمل عليه ، لذلك دعونا نتعرف على المزيد حول Node.js!
لننظر في القضية:
فكر في موقع ويب تحتاج فيه إلى تحميل محتوى بشكل ديناميكي من خادم ويب آخر بطيء. في PHP يمكنك القيام بذلك بطريقتين - ترميزه في ملف بسيط و ترميزه كنص آخر, ثم تنفيذه في نهج متعدد مؤشرات الترابط.
في الطريقة الأولى على الرغم من أن الكود بسيط توقف التنفيذ لفترة من الوقت عند نقطة الوصول إلى خادم الويب البطيء. الطريقة الثانية هي أكثر الأمثل في حالة الأداء ولكن من الصعب رمز ولديه إدارة الحمل multithread. الحالة مماثلة لمعظم لغات برمجة الويب غير جافا سكريبت من جانب الخادم ، مثل Node.js.
ما هو الفرق في Node.js? من أجل فهم Node.js يجب أن تضع في اعتبارك جافا سكريبت البرمجة القائمة على الحدث في المتصفح. نحن نستخدم نفس التكنولوجيا هنا. بدلاً من استخدام مؤشر ترابط منفصل ، تعلق وظيفة لهذا الحدث النهاية من “بطء الوصول إلى خادم الويب” المذكورة أعلاه ، وبالتالي تحصل على وظيفة كاملة في الخيار الثاني المحسن المذكور أعلاه دون أي حمل متعدد مؤشرات الترابط.
الشروع في العمل مع Node.js
Node.js هو JavaScript. لماذا لا يمكننا استخدام وظيفة جافا سكريبت القائمة على الحدث في العميل إلى الخادم؟ قد يكون هذا الفكر أدى إلى تطوير Node.js.
ومع ذلك ، فإن أهم ما يميز Node.js - إنها وظائف غير متزامنة قائمة على الأحداث. ويستخدم حلقة الحدث بدلاً من انتظار عمليات الإدخال / الإخراج (الوصول إلى خدمة ويب خارجية ، الوصول إلى الأجهزة).
لا يزال Node.js الاستفادة من قوة المعالجة عندما يكون الخادم في انتظار أي عملية أخرى. وهذا يجعل Node.js القابلة للتطوير إلى ملايين الاتصالات المتزامنة.
كيف جافا سكريبت تعمل على خادم?
Node.js يعمل على بيئة v8 - بل هو آلة افتراضية أو محرك جافا سكريبت الذي يقوم بتشغيل شفرة JavaScript ، لذلك لا يمكنك استخدام مضيفات الويب العادية للاستضافة. سوف تحتاج تلك التي لديها بيئة v8.
فيما يلي بعض اقتراحات الموفر لاستضافة Node.js:
- سحابة مسبك
- Cloudnode
- DotCloud
- Duostack
تثبيت Node.js
سوف الإرادة تعمل بشكل مثالي على أنظمة التشغيل Linux و Macintosh و Solaris. على Windows ، يمكنك تثبيته باستخدام طبقة مضاهاة Cygwin. لا تعد أي من الإنشاءات في Windows مرضية ولكن لا يزال من الممكن تشغيل شيء ما.
الخيار 1: بناء العقدة من المصدر.
استعمال يصنع
بناء وتثبيت node.js (تنفيذ ما يلي في سطر الأوامر). بوابة مطلوب.
git clone - ditth 1 git: //github.com/joyent/node.git cd node git checkout v0.4.11 export JOBS = 2 mkdir ~ / local ./configure --prefix = $ HOME / local / node make make install echo 'export PATH = $ HOME / local / node / bin: $ PATH' >> ~ / .profile echo 'export NODE_PATH = $ HOME / local / node: $ HOME / local / node / lib / node_modules' >> ~ / .profile المصدر ~ / .profile
الخيار 2: تثبيت Node.js من الحزمة
بالنسبة لمستخدمي نظام Mac ، يمكنك تثبيت Node.js كحزمة من https://sites.google.com/site/nodejsmacosx/ والتي تعد بديهية تمامًا.
اختبار تركيب العقدة
من أجل التحقق من تثبيت Node الناجح ، يمكننا تجربة برنامج "Hello World" البسيط. إنشاء ملف باسم "test.js"واكتب الكود التالي فيه.
var sys = require ("sys") ؛ sys.puts ("Hello World") ؛
شرح الكود:
انه يحمل تميز الكلية
الطبقة إلى متغير تميز الكلية
. ثم يستخدم تميز الكلية
الاعتراض على أداء مهام وحدة التحكم. ال sys.puts
هو أمر مشابه ل cout
في C ++ ، لذلك من أجل تشغيل البرنامج النصي أعلاه ، انتقل إلى موجه الأوامر وقم بتشغيله بواسطة الأمر التالي:
العقدة test.js
إذا نجح التثبيت ، فستحصل على إصدار hello world في الشاشة.
إنشاء خادم HTTP
حان الوقت الآن لإنشاء "Hello World" عبر خادم الويب باستخدام Node.js. إليك ما سنفعله - نحن إنشاء خادم يخرج “مرحبا بالعالم” إلى المضيف المحلي على المنفذ 8080 بغض النظر عن عنوان URL ، مما يتيح لك فكرة عما هدف هو.
الرموز:
var sys = require ("sys") ، my_http = require ("http") ؛ my_http.createServer (دالة (طلب ، استجابة) sys.puts ("لقد بدأت في الركل") ؛ response.writeHeader (200 ، "Content-Type": "text / plain") ؛ response.write ("Hello World" ") ؛ response.end () ؛). الاستماع (8080) ؛ sys.puts ("Server قيد التشغيل على 8080") ؛
شرح الكود:
الجزء الأكثر إثارة للاهتمام في Node.js هو البرمجة المستندة إلى الأحداث. من أجل إنشاء خادم HTTP نحن بحاجة إلى مكتبة HTTP, لذلك نمضي قدمًا ونضيفه باستخدام my_http
. نقوم بإنشاء خادم بواسطة الوظيفة:
my_http.createServer (وظيفة (طلب والاستجابة) ) استماع (8080)؛
يتم تنفيذ الوظيفة المقدمة كحجة أولى في كل مرة يتم تشغيل حدث في المنفذ 8080, وبالتالي فإن الوظيفة نفسها يقترح العقدة للاستماع لحدث في المنفذ 8080. من أجل الكشف عن هذا ، أضفت أ “لقد تعرضت للركل” الرسالة التي سيتم عرضها على شاشة وحدة التحكم عند تلقي طلب.
ال طلب
كائن يحتوي جميع المعلومات حول الطلب الذي تم تقديمه إلى الخادم. على سبيل المثال يحتوي على سلسلة URL. ال استجابة
الكائن هو الكائن الذي يعالج استجابة من الخادم. أولاً ، قمنا بتعيين رأس الاستجابة ك نص عادي
المحتوى ، ثم المخرجات “مرحبا بالعالم“, ثم إنهاء تيار الإخراج. 200 هو استجابة الحالة.
حسنًا ، المثال أعلاه مثال بسيط للغاية ولكن يمكننا أن نرى أنه بغض النظر عن عنوان URL الذي نقدمه في المتصفح لنفس الخادم ، نحصل على نفس المخرجات مثل “مرحبا بالعالم”.
إنشاء خادم ملف ثابت بسيط
لنقم بإنشاء خادم ملفات ثابت بسيط في البرنامج التعليمي التالي.
الرموز:
var sys = require ("sys") ، my_http = require ("http") ، path = require ("path") ، url = require ("url") ، filesys = require ("fs")؛ my_http.createServer (function (request، response) var my_path = url.parse (request.url) .pathname؛ var full_path = path.join (process.cwd ()، my_path)؛ path.exists (full_path، function (موجود ) if (! موجود) response.writeHeader (404 ، "Content-Type": "text / plain") ؛ response.write ("404 لم يتم العثور على \ n") ؛ response.end ()؛ آخر filesys.readFile (full_path ، "ثنائي" ، دالة (err ، ملف) if (err) response.writeHeader (500 ، "Content-Type": "text / plain") ؛ response.write (err + "\ n") ؛ response.end () ؛ آخر response.writeHeader (200) ؛ response.write (ملف ، "ثنائي") ؛ response.end () ؛) ؛) ؛)). استماع (8080)؛ sys.puts ("Server قيد التشغيل على 8080") ؛
شرح الرموز:
الكود أعلاه بسيط للغاية ، سنناقشه ككتل.
var sys = require ("sys") ، my_http = require ("http") ، path = require ("path") ، url = require ("url") ، filesys = require ("fs")؛
كل هذه المكتبات مطلوبة للبرنامج. استخدامه سيكون واضحا في الكود التالي.
var my_path = url.parse (request.url) .pathname؛ var full_path = path.join (process.cwd ()، my_path)؛
ال طلب
يحتوي الكائن على تفاصيل الطلب كما ناقشنا سابقًا. نحن نستخدم ال تحليل
وظيفة من فئة URL التي قمنا بإدراجها للحصول على مسار
عنوان URL للطلب. بعد الحصول على اسم المسار ، نربطه بمسار دليل العمل الحالي من أجل الحصول على المسار الكامل للملف.
للانضمام إلى عناوين URL ، لدينا وظيفة تسمى انضم
في مكتبة المسار.
path.exists (full_path، وظيفة (وجود)
بعد الحصول على المسار الكامل ، نتحقق مما إذا كان المسار موجودًا بواسطة الوظيفة موجود
. بعد الانتهاء من الاختيار ، يتم استدعاء وظيفة رد الاتصال وتمريرها كوسيطة ثانية.
إذا كان (! موجود) response.writeHeader (404، "Content-Type": "text / plain")؛ response.write ("404 لم يتم العثور على \ n") ؛ response.end ()؛ آخر filesys.readFile (full_path ، "ثنائي" ، دالة (err ، ملف) if (err) response.writeHeader (500 ، "Content-Type": "text / plain") ؛ response.write ( err + "\ n") ؛ response.end () ؛ آخر response.writeHeader (200) ؛ response.write (ملف ، "ثنائي") ؛ response.end () ؛) ؛
الآن في وظيفة رد الاتصال إذا كان الملف غير موجود ، فسنرسل "404 الصفحة غير موجودة"خطأ.
إذا تم العثور على الصفحة ثم نقرأ الملف من قبل إقرا الملف
وظيفة في نظام الملفات. يمكننا أن نرى أيضا وظيفة رد الاتصال ل إقرا الملف
وظيفة محددة هناك نفسها. إذا لم يكن هناك خطأ في قراءة الملف ، فسيتم عرضه. إذا كان هناك خطأ ، فسيتم إرجاع الحالة 500 مع نص الخطأ.
أوصي أيضًا بتغليف أكواد البرنامج التعليمي السابق في وظيفة حتى تتمكن من استخدامها في البرنامج التعليمي التالي أو للاستخدام في المستقبل.
var sys = require ("sys") ، my_http = require ("http") ، path = require ("path") ، url = require ("url") ، filesys = require ("fs")؛ my_http.createServer (function (request، response) var my_path = url.parse (request.url) .pathname؛ var full_path = path.join (process.cwd ()، my_path)؛ path.exists (full_path، function (موجود ) if (! موجود) response.writeHeader (404 ، "Content-Type": "text / plain") ؛ response.write ("404 لم يتم العثور على \ n") ؛ response.end ()؛ آخر filesys.readFile (full_path ، "ثنائي" ، دالة (err ، ملف) if (err) response.writeHeader (500 ، "Content-Type": "text / plain") ؛ response.write (err + "\ n")؛ response.end ()؛ آخر response.writeHeader (200) ؛ response.write (ملف ، "ثنائي") ؛ response.end () ؛) ؛) ؛ my_http. createServer (function (request، response) var my_path = url.parse (request.url) .pathname؛ load_file (my_path، response)؛). listen (8080)؛ sys.puts ("Server Running on 8080")؛
ترقب !
هذا كل شئ. آمل أن يكون هذا يمنحك فكرة جيدة عن Node.js. في المقالة التالية ، سأريكم كيف تحميل وعرض عدد من يحب الفيسبوك باستخدام Node.js. ترقب!
ملحوظة المحرر: هذا هو مكتوب من قبل جيو بول ل Hongkiat.com. Geo هو مطور ويب / iPhone مستقل يتمتع بالعمل مع PHP و Codeigniter و WordPress و jQuery و Ajax. لديه 4 سنوات من الخبرة في PHP وخبرة سنتين في تطوير تطبيقات iniPhone.