Node.js تعليمي للمبتدئين. الجزء الأول





يوم جيد يا اصدقاء!



أقدم لكم ترجمة دليل Node.js هذا .



الأجزاء الأخرى:



الجزء الأول

الجزء الثاني

الجزء الثالث

الجزء الرابع



مقدمة إلى Node.js



Node.js هو وقت تشغيل جافا سكريبت مفتوح وعبر الأنظمة الأساسية. هذا حل رائع لأي مشروع تقريبًا.



يقوم Node.js بتشغيل محرك جافا سكريبت V8 ، وهو جوهر Google Chrome ، خارج المتصفح. هذا يجعل Node.js أداءً جيدًا.



يتم تشغيل تطبيقات Node.js كعملية واحدة ، دون إنشاء مؤشر ترابط جديد لكل طلب. يوفر Node.js مجموعة من بدائل الإدخال / الإخراج غير المتزامنة في المكتبة القياسية ، والتي تحمي جافا سكريبت من الحظر ، وعادة ما تتم كتابة المكتبات في Node.js باستخدام نماذج غير مانعة للحظر ، مما يجعل سلوك الحظر استثناءً وليس قاعدة.



عندما ينفذ Node.js عملية إدخال / إخراج ، مثل قراءة (البيانات) من الشبكة ، والوصول إلى قاعدة بيانات أو نظام ملفات ، بدلاً من حظر مؤشر الترابط وانتظار اكتمال دورات وحدة المعالجة المركزية ، سيستمر Node.js في تنفيذ العملية بعد تلقي استجابة.



يسمح هذا لـ Node.js بمعالجة آلاف الطلبات بشكل متزامن من خلال خادم واحد دون الحاجة إلى نظام اتساق الدفق الذي يمكن أن يكون مصدرًا لأخطاء خطيرة.



هناك ميزة كبيرة لـ Node.js وهي أن الملايين من المطورين الذين يكتبون JavaScript للمتصفح قادرون الآن على كتابة التعليمات البرمجية من جانب الخادم بالإضافة إلى التعليمات البرمجية من جانب العميل دون الحاجة إلى تعلم لغة (برمجة) مختلفة تمامًا.



في Node.js ، يمكن استخدام معايير ECMAScript الجديدة بدون مشاكل ، لا تحتاج إلى الانتظار حتى يقوم جميع المستخدمين بتحديث متصفحاتهم - أنت تقرر أي إصدار من ECMAScript لاستخدامه عن طريق تغيير إصدار Node.js ، يمكنك أيضًا إضافة ميزات تجريبية عن طريق تشغيل Node.js مع الأعلام (المقابلة).



عدد ضخم من المكتبات


تساهم Npm ، ببنيتها البسيطة ، في النمو السريع لنظام Node.js البيئي ؛ واليوم ، يتم تسجيل أكثر من مليون حزمة مفتوحة مع npm ، والتي يمكنك استخدامها مجانًا.



مثال على تطبيق Node.js


حالة الاستخدام الأكثر شيوعًا لـ Node.js هي إنشاء خادم ويب:



const http = require('http')

const hostname = '127.0.0.1'
const port = process.env.PORT 

const server = http.createServer((req, res) => {
    res.statusCode = 200
    res.setHeader('Content-Type', 'text/plain')
    res.end('Hello World!\n')
})

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`)
})


أول شيء نقوم به هو توصيل وحدة http .



يحتوي Node.js على مكتبة قياسية رائعة تتضمن دعم شبكات عالي الجودة.



تقوم الطريقة createServer() httpبإنشاء خادم HTTP جديد وإعادته.



تم تعيين الخادم للاستماع على منفذ ومضيف معين. عندما يكون الخادم جاهزًا ، يتم تشغيل وظيفة رد الاتصال ، في هذه الحالة ، للإشارة إلى أن الخادم قيد التشغيل.



عندما جديد طلب استدعاء الحدث الطلب ، التي تحتوي على كائنين: طلب (كائن http.IncomingMessage (رسالة واردة)) والرد (الكائن http.ServerResponse (استجابة الخادم)).



هذه الكائنات مطلوبة لمعالجة مكالمة HTTP.



يحتوي الكائن الأول على تفاصيل الطلب. في مثالنا ، لا يتم استخدامه ، ولكن يمكنك الوصول إلى رؤوس الطلبات وبياناتها.



يتم استخدام الكائن الثاني لتوفير البيانات لمقدم الطلب.



في هذه الحالة ، من خلال



res.statusCode = 200


قمنا بتعيين خاصية statusCode إلى 200 كمؤشر لإكمال الطلب بنجاح.



قمنا بتعيين رأس نوع المحتوى (المحتوى أو نوع المحتوى)



res.setHeader('Content-Type', 'text/plain')


وأغلق الرد بإضافة محتوى كحجة إلى end():



res.end('Hello World\n')


Node.js أطر وأدوات


Node.js هي منصة منخفضة المستوى. تم إنشاء الآلاف من المكتبات المختلفة لتلبية احتياجات المطورين.



بمرور الوقت ، أصبح العديد منهم شائعًا جدًا. وفيما يلي قائمة ببعض منها:





Node.js



صدق أو لا تصدق ، Node.js يبلغ من العمر 10 سنوات فقط.



وبالمقارنة ، فإن جافا سكريبت موجودة منذ 24 عامًا ، والويب لمدة 30.



10 سنوات هي فترة قصيرة للتكنولوجيا ، ولكن في بعض الأحيان يبدو أن Node.js كانت دائمًا.



تعرفت على Node.js عندما مرت سنتان فقط منذ إنشائها ، ولكن حتى ذلك الحين ، على الرغم من المعلومات المحدودة ، شعرت بأن المستقبل ينتظرها.



في هذا القسم ، سنلقي نظرة على الصورة الكبيرة لتاريخ Node.js.



القليل من التاريخ


JavaScript هي لغة برمجة اخترعتها Netscape كأداة للبرمجة النصية للتعامل مع صفحات الويب في متصفح Netscape Navigator .



جزء من نموذج أعمال Netscape هو بيع خوادم الويب التي تتضمن إطار عمل Netscape LiveWire ، والذي يمكنه إنشاء صفحات ديناميكية باستخدام JavaScript من جانب الخادم. للأسف ، فشل Netscape LiveWire ولم تكن JavaScript من جانب الخادم شائعة حتى Node.js.



أحد العوامل الرئيسية في شعبية Node.js هو الوقت (مظهره). تم التعرف على جافا سكريبت كلغة جدية (برمجة) قبل بضع سنوات بفضل تطبيقات "Web 2.0" (مثل Flickr و Gmail وغيرها) التي تُظهر للعالم ما قد تبدو عليه شبكة الويب الحديثة.



كما تحسنت محركات جافا سكريبت بشكل ملحوظ حيث سعت المتصفحات إلى تحسين الأداء لصالح المستخدمين. عملت فرق تطوير المتصفح الرئيسية بجد لجعل JavaScript أفضل دعمًا وتنفيذًا في أسرع وقت ممكن. المحرك الذي تستخدمه Node.js ، V8 (المعروف أيضًا باسم Chrome V8 - محرك جافا سكريبت مفتوح المصدر لمشروع Chromium) انتصر من هذه المنافسة.



ظهر Node.js في الوقت والمكان المناسبين. لحسن الحظ ، ليس هذا هو السبب الوحيد لشعبيتها. احتوى المشروع على عدد كبير من الأفكار والأساليب المبتكرة لتطوير جافا سكريبت من جانب الخادم ، وهو ما أعجب العديد من المطورين.



2009


  • ظهر Node.js
  • ظهرت Npm


2010


  • التعبير
  • Socket.io


2011


  • npm الإصدار 1.0
  • Node.js: LinkedIn, Uber .
  • hapi


2012


  • Node.js


2013




2014


  • : Node.js io.js ( — git) ES6


2015




2016




2017


  • npm
  • Node.js 8
  • HTTP/2
  • V8 Node.js , Node.js JS Chrome
  • 3 npm


2018


  • Node.js 10
  • دعم وحدة ES التجريبية مع الامتداد .mjs


كيف أقوم بتثبيت Node.js؟



يمكن تثبيت Node.js بطرق مختلفة.



توزيعات المنصات الرئيسية متاحة على الموقع الرسمي .



طريقة سهلة للغاية لتثبيت Node.js هي استخدام مدير الحزم. لكل نظام تشغيل خاص به.



على macOS ، هذا هو Homebrew ، مما يجعل من السهل تثبيت Node.js باستخدام سطر الأوامر:



brew install node


يمكن العثور على قائمة بمديري الحزم لأنظمة Linux و Windows والأنظمة الأخرى هنا .



nvmهي طريقة شائعة لتشغيل Node.js. يسمح لك بالتبديل بسهولة بين إصدارات Node.js ، وتثبيت إصدارات جديدة للاختبار ، والتراجع عن عمليات التثبيت في حالة حدوث خطأ ما.



كما أنه مفيد جدًا عندما تحتاج إلى اختبار التعليمات البرمجية في الإصدارات القديمة من Node.js.



لمزيد من التفاصيل nvmاتبع هذا الرابط .



نصيحتي هي استخدام المثبت الرسمي إذا كنت قد بدأت للتو ولم تستخدم Homebrew من قبل.



بعد تثبيت Node.js ، يمكنك الوصول إلى البرنامج القابل للتنفيذ nodeفي سطر الأوامر.



إلى أي مدى تحتاج إلى معرفة JavaScript للعمل مع Node.js؟



كونك مبتدئًا ، من الصعب تحديد مستوى البرمجة لديك.



من الصعب أيضًا تحديد مكان انتهاء JavaScript وبدء Node.js والعكس صحيح.



أنا شخصياً أنصح بفهم جيد لمفاهيم جافا سكريبت الأساسية التالية قبل الغوص في Node.js:



  • بناء الجملة أو البنية المعجمية
  • التعبيرات (بشكل أساسي نفس البنية)
  • أنواع البيانات)
  • المتغيرات
  • المهام
  • هذه الكلمة
  • وظائف السهم
  • حلقات
  • مجال الرؤية
  • المصفوفات
  • قالب أو سلسلة حرفية
  • فاصلة منقوطة (على الأرجح حالات الاستخدام الإلزامي ، على سبيل المثال ، عند العمل مع IIFE)
  • نظام صارم
  • ECMAScript 6 ، 2016 ، 2017


إن إتقان هذه المفاهيم هو بداية مسار مطور محترف متكامل.



تعتبر المفاهيم التالية أساسية أيضًا لفهم البرمجة غير المتزامنة ، والتي تعد جزءًا أساسيًا من Node.js:



  • برمجة واسترجاعات غير متزامنة (استرجاعات)
  • المؤقتات (العدادات)
  • وعود وعود)
  • غير متزامن / انتظار
  • الإغلاق
  • حلقة الحدث (مكدس الاستدعاءات)


الفرق بين Node.js والمتصفح



يمكن استخدام JavaScript في كل من المتصفح و Node.js.



ومع ذلك ، يختلف إنشاء تطبيقات المستعرض تمامًا عن إنشاء تطبيقات Node.js.



على الرغم من حقيقة استخدام جافا سكريبت في كلتا الحالتين ، إلا أن هناك بعض الاختلافات الرئيسية التي تحدد تفاصيل التطوير.



من وجهة نظر الواجهة الأمامية لجافا سكريبت (مطور الواجهة الأمامية - جزء العميل من التطبيق) ، يتمتع تطوير التطبيق على Node.js بميزة كبيرة ، حيث يتم التعبير عنه في حقيقة أنه في كل مكان ، على العميل وعلى الخادم ، يتم استخدام لغة برمجة واحدة - JavaScript.



هذه فرصة عظيمة لتصبح كومة كاملة: نعلم جميعًا مدى صعوبة تعلم لغة برمجة جديدة تمامًا وبعمق ، وفي هذه الحالة ، لا توجد مثل هذه الحاجة.



الشيء الوحيد الذي يجب دراسته هو النظام البيئي.



في المتصفح ، في معظم الأحيان يتعين علينا التعامل مع DOM وواجهات برمجة تطبيقات الويب الأخرى مثل ملفات تعريف الارتباط. بالطبع ليست موجودة في Node.js. يفتقر Node.js إلى النافذة والمستند والكائنات الأخرى الخاصة بالمتصفح.



من ناحية أخرى ، تفتقر المتصفحات إلى واجهات برمجة التطبيقات الرائعة التي يوفرها Node.js من خلال الوحدات النمطية ، مثل الوصول إلى نظام الملفات.



فرق كبير آخر هو أنه في Node.js ، يمكنك التحكم في بيئة تنفيذ التعليمات البرمجية. ما لم تكن تقوم بتطوير تطبيق مفتوح المصدر يمكن لأي شخص نشره في أي مكان ، فأنت تعرف أي إصدار من Node.js يستخدم لتشغيل التطبيق. هذا أمر مريح للغاية على النقيض من وقت تشغيل المتصفح ، حيث يمكن للمستخدمين تحديد المتصفح الذي يستخدمونه.



هذا يعني أنه يمكنك كتابة كود JavaScript المدعوم من نسختك من Node.js.



نظرًا لأن جافا سكريبت تتطور ديناميكيًا جدًا ، فليس لدى المتصفحات دائمًا الوقت لتنفيذ ميزات اللغة الجديدة بسرعة ، ولا يقوم المستخدمون دائمًا بالتحديث في الوقت المناسب ، لذلك غالبًا ما يتعين عليك الحفاظ على جافا سكريبت القديمة على الويب.



لنقل التعليمات البرمجية إلى ES5 ، يمكنك استخدام Babel ؛ في Node.js ، هذا ليس ضروريًا.



اختلاف آخر هو أن Node.js يستخدم نظام وحدات CommonJS ، وتدعم المتصفحات وحدات ES.



عمليًا ، هذا يعني أنه في Node.js نستخدمه require()، وفي المتصفح import.



شكرا لكم على اهتمامكم يا اصدقاء. إذا وجدت أخطاء وأخطاء مطبعية لا تتردد في الكتابة في PM ، سأكون ممتنا.



يتبع…



All Articles