Node.js یک پلتفرم بسیار قدرتمند مبتنی بر جاوا اسکریپت است که برای توسعه اپلیکیشنهای چت آنلاین، سایتهای پخش ویدیو، اپلیکیشنهای ساده تک صفحهای و بسیاری دیگر از اپلیکیشنهای کاربردی مبتنی بر وب I/O و سرویسهای تحت وب استفاده میشود.
شرکتهای بزرگ و استارتاپها مانند نتفلیکس، پیپال، ناسا، والمارت و بسیاری از برندهای مشهور دیگر از Node js که بر اساس موتور جاوا اسکریپت V8 گوگل کروم ساخته شده است، استفاده میکنند.
Node js اوپن سورس (منبع باز) و کاملاً رایگان است و هزاران توسعهدهنده از سرتاسر جهان از آن بهره میبرند. این پلتفرم مزایای زیادی ارائه میدهد و همین امر باعث میشود نسبت به سایر پلتفرمها مانند جاوا یا PHP گزینه بهتری باشد.
اگر در node js تازهکار هستید یا قصد دارید یادگیری و آموزش node js را شروع کنید، با ما در ادامه مطلب همراه باشید تا به اصول اولیه، دلیل استفاده از Node.js، بخشهای مختلف و موارد استفاده آن بپردازیم.
Node.js چیست
Node.js محیط اجرا و کتابخانه جاوا اسکریپت متنباز و چند پلتفرمی برای اجرای برنامههای مبتنی بر وب است که رایان دال (Ryan Dahl) در سال ۲۰۰۹ توسعه داد. آخرین نسخه آن یا همان نسخه ۱۵٫۱۴ در آوریل سال ۲۰۲۱ منتشر شد.
توسعهدهندگان و برنامهنویسان از Node.js برای ایجاد برنامههای کاربردی و نرمافزارهای با دیتای پرحجم استفاده میکنند. اکنون که متوجه شدیم Node js چیست، باید دلیل رواج آن را در توسعه وب بررسی کنیم.
دلایل استفاده از node.js
Node js تبدیل به محبوبترین ابزار برای توسعه برنامههای سمت سرور و شبکه شده است. دلیل آن میتواند موارد زیر باشد:
۱. سرعت بسیار بالای Node.js
کتابخانه آن که روی موتور جاوا اسکریپت V8 گوگل کروم پایهگذاری شده است، برای اجرای کد از نظر سرعت بسیار قوی عمل میکند.
۲. سرویس NPM یا Node Package manager
Node package manager بیش از ۵۰۰۰۰ باندل دارد، بنابراین هر عملکرد موردنیاز برای برنامه را میتوان بهراحتی از آن وارد کرد.
۳. استفاده node.js از برنامهنویسی ناهمگام
همه API های کتابخانه node js ناهمگام هستند، بنابراین یک سرور مبتنی بر node.js منتظر نمیماند تا API دادهها را برگرداند. سرور API را فرا میخواند و در صورتی که هیچ دادهای برگردانده نشود، سرور به API بعدی منتقل میشود.
ماژول Events در node.js به سرور کمک میکند از ارتباط پیشین با API پاسخ دریافت شود که به سرعت بالاتر Node.js نیز میانجامد.
۴. بدون بافر
Node.js میتواند زمان پردازش هنگام آپلود فایلهای صوتی و تصویری را بهطور چشمگیری کاهش دهد. برنامههایی که از node js استفاده میکنند هرگز دادهها را بافر نخواهند کرد و قادر هستند از دادهها بهسادگی و در قالب چند بخش خروجی دهند.
۵. پردازش تکرشتهای
Node.js از یک مدل تکرشتهای (single thread) با Event loop استفاده میکند. در نتیجه نسبت به سرورهای دیگر مانند Apache HTTP Server میتواند به تعداد بسیار بیشتری از درخواستها خدمات ارائه دهد.
single thread امکانی است که به ما اجازه میدهد عملیاتهای مختلف خود را بهراحتی به شکل async یا ناهمگام انجام دهیم.
Event loop نیز به معنای رویداد محور بودن node js است. این رویدادها میتوانند شامل کلیک روی ماوس یا حرکات کیبورد باشند.
۶. مقیاسپذیری
سرور node.js به روش non-blocking یا ورودی و خروجی غیر مسدودکننده پاسخ میدهد که باعث میشود نسبت به دیگر سرورها که تعداد رشتههای محدودی برای رسیدگی به درخواستها ایجاد میکنند، بیشتر قابل اندازهگیری باشد.
موارد ذکرشده میتوانند دلیل عمده محبوبیت پلتفرم node js باشند و توضیح دهند که چرا شرکتها و کسبوکارهای بزرگ از آن استفاده میکنند. در قسمت بعدی از آموزش node js باید با بخشهای مختلف آن آشنا شویم.
معماری Node.js
اکنون که با node آشنا شدیم، زمان آن فرا رسیده است که اطلاعاتی نیز در مورد معماری آن کسب کنیم. node.js بهصورت تکرشتهای کار میکند و به آن اجازه میدهد هزاران حلقه از رویداد را بهصورت همزمان مدیریت کند.
نمودار زیر که از سایت sinform.com برداشته شده است، معماری node.js را به بهترین شکل ممکن توضیح میدهد.
بخشهای Node.js
برای درک بهتر از پلتفرم سمت سرور باید به مرور هر قسمت از node.js بپردازیم.
ماژولها
ماژولها مانند کتابخانههای جاوا اسکریپت هستند که میتوانند در برنامه node js در مجموعهای از توابع و کارکردها استفاده شوند. برای گنجاندن یک ماژول در برنامههای node.js از تابع require () با نام ماژول در پرانتز استفاده میکنیم.
Node.js ماژولهای بسیار زیادی دارد که عملکردهای اساسی موردنیاز برای یک وب اپلیکیشن را فراهم میکند. بعضی از آنها در جدول زیر ذکر شدهاند:
کنسول
کنسول (console) ماژولی بوده که روشی را برای اشکالزدایی فراهم میکند که مشابه کنسول اصلی جاوا اسکریپت موجود در مرورگرهای اینترنت است و پیامهای خروجی را با عنوان stdout و stderr ارائه میدهد.
کلاستر
Node.js بر اساس مفهوم برنامهنویسی تکرشتهای ساخته شده است. کلاستر (Cluster) ماژولی است که امکان چند رشتگی را با ایجاد فرآیندهای فرزند (Child Process) که پورت سرور یکسانی را به اشتراک میگذارند و بهطور همزمان اجرا میشوند، فراهم میکند.
میتوان یک کلاستر را با روش زیر به اپلیکیشن اضافه کرد:
گلوبال
گلوبال آبجکت یا اشیا جهانی (Global Objects) در همه ماژولها وجود دارند. این آبجکتها شامل توابع، ماژولها، رشتهها و دیگر موارد مشابه میشوند. بعضی از آبجکتهای گلوبال موجود در Node.js در جدول زیر ذکر شدهاند:
خطاها و رسیدگی به آنها
در برنامههای Node.js ممکن است چهار نوع خطا رخ دهد که در تصویر زیر مشخص شدهاند.
خطاهای Node js از طریق استثناها کنترل میشوند. برای مثال نگاهی به خطایی بیندازید که هنگام تقسیم یک عدد بر صفر رخ میدهد. این خطا برنامه Node.js را از کار میاندازد؛ بنابراین باید آن را کنترل کنیم تا به برنامه دوباره بهصورت عادی اجرا شود.
استریمینگ
خطاهای node js آبجکتهایی هستند که به ما امکان میدهند تا دادهها را بهطور مداوم بخوانیم یا وارد کنیم. چهار نوع استریم (Stream) وجود دارد.
- خواندنی یا readable: انواع استریمهایی که میتوانیم به کمک آنها دادهها را بخوانیم.
- Writable: انواع استریمهایی که میتوانیم دادهها را روی آنها بنویسیم.
- دوبلکس (duplex): این استریمها قابل خواندن و همچنین نوشتن هستند.
- ترنسفورم یا تبدیل: استریمهایی هستند که میتوانند حین خواندن یا نوشتن، دادهها را دستکاری کنند.
بافر
بافر ماژولی است که امکان مدیریت جریانهایی را که تنها حاوی دادههای باینری هستند، فراهم میکند. یک بافر خالی به طول ۱۰ را میتوان با این روش ایجاد کرد:
دامنه
ماژول دامنه خطاهایی را که کنترل نشده باقی میمانند، رهگیری میکند. برای رهگیری این خطاها از دو روش استفاده میشود:
- بایندینگ داخلی یا Internal Binding: error emitter یا ارسالکننده خطا کد خود را با روش run اجرا میکند.
- بایندینگ خارجی یا External Binding: ارسالکننده خطا با روش add یا افزودن، به دامنه اضافه میشود.
دیاناس
ماژول DNS برای اتصال به سرور DNS و انجام تفکیک نام با استفاده از روشهای زیر انجام میشود:
ماژول DNS همچنین برای انجام name resolution بدون ارتباط با شبکه از روشهای زیر مورداستفاده قرار میگیرد:
دیباگر یا اشکالزدا
Node js شامل یک ابزار اشکالزدایی بوده که توسط یک سرویسگیرنده اشکالزدایی داخلی قابل دسترس است. اشکال زدای node.js چندان قدرت زیادی ندارد اما میتواند بازرسی ساده کدها را پشتیبانی کند.
دیباگر را میتوان با استفاده از کلمه کلیدی inspect قبل از نام فایل جاوا اسکریپت در ترمینال استفاده کرد. برای بررسی یک فایل مانند myscript.js میتوانید روش زیر را در پیش بگیرید:
اکنون که با این مطلب آموزش node js توانستیم به آشنایی کلی از آن دست پیدا کنیم، باید به بررسی فریمورک (framework) یا چارچوب node.js Express بپردازیم.
چارچوب اکسپرس نود. جیاس
Express یک چارچوب برنامه کاربردی وب انعطافپذیر در node.js است که مجموعه گستردهای از ویژگیها را برای توسعه برنامههای کاربردی وب و موبایل فراهم میکند. در حقیقت یک لایه ساخته شده در بالای node.js است که به مدیریت سرور و مسیرها کمک میکند.
به بعضی از ویژگیهای اصلی فریمورک Express توجه کنید:
- استفاده برای طراحی اپلیکیشنهای مبتنی بر وب تک صفحهای، چند صفحهای و ترکیبی
- به توسعه دهندگان اجازه میدهد تا میانافزارهایی را برای پاسخ به درخواستهای HTTP راهاندازی کنند.
- یک جدول مسیریابی را تعریف میکند که برای انجام اقدامات مختلف بر اساس روش HTTP و URL استفاده میشود.
- رندر دینامیک و پویای صفحات HTML بر اساس آرگومانهای ارسال شده به قالبها
در این بخش از آموزش node js به نمونهای از یک برنامه ساده «Hello World» که با استفاده از فریمورک Express توسعه یافته است، توجه کنید تا بتوانید به درک بهتری از این چارچوب یا فریمورک برسید.
- Var express: واردکردن چارچوب express به برنامه js
- get(): تابع Callback با پارامترهای «درخواست» و «پاسخ»
- آبجکت درخواستی (The request object): نشاندهنده درخواست HTTP بوده و دارای ویژگیهایی برای رشته درخواست، پارامترها، بدنه، سر تیترها یا header های HTTP و دیگر موارد است.
- آبجکت پاسخ (The response object): پاسخ HTTP را نشان میدهد که یک برنامه Express هنگام دریافت درخواست HTTP، ارسال میکند.
- اپلیکیشن به پورت تعریفشده گوش میدهد که در حالت موجود، ۸۰۸۱ است و متغیرهای host و port به ترتیب حاوی آدرس و پورت خواهند بود.
- log: برای نشاندادن آدرس و پورت در خط فرمان (command prompt) یا ترمینال (terminal) است.
موارد استفاده از Node.js
نتفلیکس با بیش از ۱۶۷ میلیون کاربر میتواند پیشروترین شبکه آنلاین جهان باشد. این سرویس از node js برای سرورهایش استفاده میکند و آن را به دلیل مقیاسپذیری و فشردهسازی دادهها انتخاب کرده است.
والمارت (Walmart) با درآمد ۵۵۹ میلیارد دلاری در سال ۲۰۲۰، پردرآمدترین شرکت جهان نامیده شد. این شرکت نیز از Node.js استفاده میکند، زیرا I/O یا همان ورودی و خروجی ناهمگام دارد و میتواند بهصورت همزمان پاسخگوی چندین درخواست باشد.
اوبر (Uber) شرکتی برای حملونقل شهری در امریکا است که خدمات مختلفی دارد. دلایل انتخاب node.js در این شرکت وجود ورودی و خروجی ناهمگام، تکرارهای سریع و ماهیت متنباز این پلتفرم بود.
ناسا، پیپال (PayPal) و سرویس Medium نیز از node.js بهره میبرند.
انپیام
انپیام (NPM) یا Node Package Manager یک کتابخانه محبوب برای node js است و مانند جواهری در تاج این پلتفرم میدرخشد.
انپیام علاوه بر رایگان بودن خود، میلیونها کتابخانه قابل دانلود دارد که بر اساس نیازهای خاص سازماندهی شدهاند و بزرگترین سیستم ثبت نرمافزار در جهان است.
این کتابخانهها تابهحال با سرعت بالایی رشد داشتهاند و یکی از ویژگیهای خوب در دنیای node.js محسوب میشوند.
Node.js برای چه مواردی استفاده میشود
نمونههای زیر میتوانند موارد استفاده سازمانها و شرکتها از Node.js را نشان دهند:
- Backend برای شبکههای اجتماعی
- اپلیکیشنهای چت
- استریم دادهها
- اپلیکیشن IoT یا اینترنت اشیا
- اپلیکیشنهای تک صفحهای
محبوبیت Node.js
اگر بررسی کنیم که مزایا و ویژگیهای برتر Node.js چیست متوجه میشویم که چطور این پلتفرم توانسته است توجه کسبوکارها و سازمانهای فراوانی را به خود جلب کند که با توجه به تطبیقپذیری و حمایت زیاد مردم، گزینه بسیار مناسبی محسوب میشود. همانطور که در بخشهای پیشین ذکر شد، چندین شرکت بزرگ از Node.js استفاده میکنند.