آموزش Node JS رایگان مقدماتی – به بیان ساده و پروژه محور
«نود جی اس» (Node.js) نوعی فناوری متحول کننده به حساب میآید که خلأ برنامه نویسی سمت سرور با جاوا اسکریپت را پُر کرده است. در حالی که وبِ مُدِرن شاهد معرفی بسیاری از فریمورکهای جاوا اسکریپت محبوب مانند «آنگولار جی اس» (Angular JS) و «بوت استرپ» (bootstrap) بود، اما باز هم این موارد در توسعه سمت سرور کافی نبودند. پیش از توسعه Node.js، در اکوسیستم توسعه وب برای محیط اجرایی که به طور خاص به منظور توسعه برنامههای کاربردی مبتنی بر سرور طراحی شده باشد، خلاء وجود داشت. در این آموزش Node JS رایگان و مقدماتی، نگاهی به این نوع محیط زمان اجرا یعنی همان نود جی اس خواهیم داشت و پتانسیل آن را برای توسعه اپلیکیشنهای قدرتمند مبتنی بر سرور بررسی میکنیم. قبل از اینکه آموزش Node JS را ارائه دهیم، ابتدا به طور مختصر و مفید اطلاعاتی را راجع به Node JS، ویژگیها، کاربردها و سایر موارد پیرامون آن در ادامه ارائه دادهایم.
نود جی اس چیست؟
Node JS نوعی محیط زمان اجرا است که به برنامهنویسان کمک میکند تا برنامههای وب سمت سرور بسازند. نود جی اس از زبان برنامه نویسی جاوا اسکریپت استفاده میکند و میتواند روی بسیاری از سیستمهای کامپیوتری مختلف کار کند.
نود جی اس برای پردازش سریع دادهها و رسیدگی به بسیاری از درخواستها به طور همزمان طراحی شده است که آن را برای برنامههای وب بلادرنگ به انتخاب بسیار مناسبی تبدیل میکند. همچنین Node JS امکان برقراری ارتباط دو طرفه بین سرور و کاربر را فراهم خواهد کرد که این کار قبل از پیدایش Node.js دشوار بود.
دلایل استفاده از نود جی اس چیست؟
در طول این سالها اکثر اپلیکیشنها مبتنی بر فریمورک درخواست و پاسخ بدون حالت بودند. در این نوع اپلیکیشنها، وظیفه توسعهدهنده است که اطمینان حاصل کند کدهای مناسبی استفاده شدهاند تا اطمینان حاصل شود در حین کار کردن کاربر با سیستم وضعیت نشست وب حفظ شده است، اما با ظهور وباپلیکیشنهای مبتنی بر Node.js، حالا میتوان به صورت زمان واقعی و لحظهای کار کرد و ارتباطی ۲ طرفه داشت. حالت حفظ میشود و کلاینت یا سرور هر کدام میتوانند ارتباط را آغاز کنند.
ویژگیهای مهم نود جی اس کدامند؟
Node.js نوعی ابزار قدرتمند با چندین ویژگی منحصربهفرد به حساب میآید که آن را در بین برنامهنویسان به ابزاری محبوب بدل کرده است. یکی از مهمترین نقاط قوت Node.js، قابلیت رسیدگی به درخواستهای همزمان به شکلی ساده است.
این کار از طریق «ورودی/خروجی» (I/O) ناهمزمان رویدادمحور انجام میشود که به Node.js اجازه میدهد تا عملیات «ورودی/خروجی» را در پسزمینه اجرا کند و به پاسخدهی به درخواستهای دیگر ادامه دهد. در مقابل، سایر انواع زبانهای برنامه نویسی، قبل از رفتن به خط بعدی منتظر میمانند تا کل فایل خوانده شود. مثالی ساده از این عملکرد در کدهای زیر آورده شده است:
1var fs = require('fs');
2 fs.readFile("Sample.txt",function(error,data)
3 {
4 console.log("Reading Data completed");
5 });
در مثال فوق، Node.js عملیات خواندن فایل را در پسزمینه آغاز میکند، در حالی که سایر پردازشها میتوانند به طور همزمان انجام شوند. بخش مهمی که باید به آن توجه داشت، مربوط به اعلان تابع تماس function(error, data) میشود. این تابع ناشناس است و پس از اتمام عملیات خواندن فایل فراخوانی میشود.
این رویکرد ناهمزمان در Node.js امکان رسیدگی کارآمدتر و همزمان چندین درخواست را فراهم میکند و آن را به انتخابی قدرتمند برای ساخت برنامههای کاربردی مقیاسپذیر و با کارایی بالا تبدیل خواهد کرد. Node.js همچنین از موتور «V8 JavaScript Runtime» استفاده میکند که باعث میشود سریعتر و کارآمدتر شود. این به نوبه خود امکان پردازش سریعتر درخواستها را فراهم خواهد کرد. علاوه بر این، Node.js از جاوا اسکریپت استفاده میکند، زبانی که اکثر توسعهدهندگان با آن آشنا هستند و این مسئله استفاده از آن را آسانتر کرده است.
همچنین یکی از بهترین موارد در خصوص Node.js انجمن برنامهنویسان فعال و پر جنبوجوش آن به حساب میآید. این انجمن برنامه نویسی تضمین میکند که نود جی اس به طور مداوم با آخرین روندهای توسعه وب بهروز میشود و آن را به انتخابی عالی برای توسعهدهندگانی تبدیل میکند که میخواهند بهروز بمانند. به طور کلی، Node.js ابزاری قدرتمند و کارآمد است که برنامه نویسی وب را در دسترستر و سریعتر میکند. ویژگیهای منحصربهفرد آن، همراه با پشتیبانی جامعهای فعال، نود جی اس را به انتخابی عالی برای توسعهدهندگان در تمام سطوح تبدیل کرده است، از این رو، یادگیری Node JS و نیاز به انواع آموزش نود جی اس بیش از پیش احساس میشود.
چه شرکت هایی از نود جی اس استفاده می کنند؟
Node.js، نوعی محیط زمان اجرای جاوا اسکریپت است که به طور گسترده بهوسیله بسیاری از شرکتها در زیرساختهای فناوری مورد استفاده قرار میگیرد.
مهمترین این شرکتها در ادامه فهرست شدهاند.
- «پی پال» (PayPal): این شرکت انتقال به Node.js را در چندین وبسایت خود آغاز کرده است.
- «لینکدین» (Linkdien): نود جی اس به وسیله شرکت LinkedIn برای تأمین انرژی سرورهای موبایل استفاده میشود و از محصولات «iPhone» ،«Android» و «Mobile Web» پشتیبانی میکند.
- «موزیلا» (Mozila): نود جی اس به وسیله شرکت موزیلا برای پشتیبانی از APIهای مرورگر استفاده میشود که بر روی بیش از نیم میلیارد دستگاه نصب شدهاند.
- «eBay»: این شرکت سرویس «HTTP API» خود را با استفاده از Node.js میزبانی میکند.
اینها تنها برخی از شرکتهایی هستند که از Node.js برای نیازهای توسعه خود استفاده میکنند و تعداد این شرکتها بسیار بیشتر از اینها است.
چه زمانی نود جی اس مفید است؟
Node.js برای «استریم» (پخش زنده) یا برنامههای بلادرنگ مبتنی بر رویداد مناسب است که از مهمترین این برنامهها میتوان موارد زیر را نام برد:
- برنامههای گفتگو: نود جی اس یکی از بهترین زیرساختها برای برنامههای چت بلادرنگ به حساب میآید.
- سرورهای بازی: Node.js برای سرورهای سریع و با کارایی بالا بسیار مناسب است که نیاز به پردازش تعداد زیادی درخواست به طور همزمان دارند.
- محیطهای مشارکتی: Node.js برای محیطهایی مفید است که شامل مدیریت اسناد به صورت مشارکتی هستند. برای مثال در مواردی که چندین کاربر سعی کنند اسناد را تغییر دهند، استفاده از Node.js میتواند مفید باشد.
- سرورهای تبلیغاتی: Node.js میتواند هزاران درخواست را برای دریافت تبلیغات از یک سرور مرکزی انجام دهد و این مسئله Node JS را به چارچوبی مناسب برای سرورهای تبلیغاتی تبدیل میکند.
- سرورهای پخش جریانی یا استریم: Node.js برای سرورهای پخش چندرسانهای مناسب است، جایی که کاربران امکان دارند محتوای چندرسانهای متفاوتی را از سرور درخواست کنند.
Node.js به ویژه زمانی مفید است که به سطوح بالایی از همزمانی و در عین حال زمان اختصاصی پردازش کمی نیاز باشد. علاوه بر این، از آنجایی که Node.js مبتنی بر جاوا اسکریپت ساخته شده است، به ویژه برای ساخت آن برنامههای سمت کلاینتی سودمند خواهد بود که مبتنی بر چارچوب جاوا اسکریپت هستند.
چه زمانی نباید از Node.js کرد؟
Node.js نوعی فریمورک همهکاره است که میتواند برای بسیاری از برنامههای کاربردی استفاده شود. با این حال، سناریوهای خاصی وجود دارند که امکان دارد استفاده از نود جی اس در آنها مفید واقع نشود.
یکی از این سناریوها زمانی است که برنامه نیاز به زمان پردازش طولانی دارد.
از آنجایی که Node.js به صورت «تکرشتهای» (Single Thread) طراحی شده است، اگر برنامهای نیاز به انجام محاسبات طولانی در پسزمینه داشته باشد، امکان دارد نتواند درخواستهای دیگر را در این مدت پردازش کند. همانطور که قبلاً ذکر شد، Node.js برای شرایطی که پردازش به زمان اختصاصی کمتری نیاز دارد، بهترین گزینه است؛ بنابراین، احتمالاً برای برنامههایی که شامل پردازش پسزمینه گسترده یا محاسبات طولانی مدت هستند، استفاده از تود جی اس انتخاب مطلوبی نخواهد بود.
آموزش Node JS رایگان
در این بخش به بحث اصلی یعنی آموزش رایگان Node JS مقدماتی پرداخته شده است. آموزش Node JS در این نوشتار به ۲ بخش اصلی مفاهیم مقدماتی و مفاهیم پیشرفته تقسیم شده است.
مفاهیم مقدماتی نود جی اس شامل موارد زیر هستند.
- دانلود و نصب نود جی اس
- آموزش NPM
- ساخت وب سرور HTTP
مفاهیم پیشرفته آموزش Node JS شامل موارد زیر است:
- آموزش فریمورک «اکسپرس» (Express)
- آموزش «مونگو دی بی» (Mongo DB)
- «وعدهها» (Promise) در نود جی اس
- «مولد یا ژنراتورها» (Generators) در Node JS
- Streams در نود جی اس
- آزمایش «Jasmine» در نود جی اس
نکته: این آموزش نود جی اس رایگان فقط به صورت مقدماتی و با بیانی کلی به شرح موضوعات مربوط به نود جی اس میپردازد و برای یادگیری مفاهیم به صورت عمیق و کاربردی، توصیه میشود از دوره آموزش مقدماتی node.js و سایر دورههای آموزشی مرتبط معرفی شده در طول این مطلب که برخی نیز پروژهمحور هستند استفاده شود.
دانلود و نصب نود جی اس
اولین قدم در آموزش Node JS نصب و راهاندازی آن است. نصب نود جی اس تقریباً مانند نصب سایر برنامههای عادی است و برای این کار کافی است که فایل نصب کننده آن را از وبسایت نود جی اس [+] دانلود و اقدام به نصب آن کرد. Node.js با سیستم عاملهای مختلف از جمله ویندوز، لینوکس و مک سازگاری دارد. پس از نصب موفقیتآمیز Node.js، میتوان اولین برنامه Node.js خود را ایجاد کرد. در این آموزش Node JS ما نصب کننده این محیط زمان اجرا را برای ویندوز دانلود و نصب کردهایم.
یکی از ویژگیهای قدرتمند Node.js توانایی آن در ترکیب عملکردهای خارجی یا توسعهیافته از طریق «ماژولهای» (Module) سفارشی است. این ماژولها طبق نیاز کاربران باید جداگانه نصب شوند. برای مثال، میتوان ماژول MongoDB را نصب کرد که به کاربر امکان میدهد مستقیماً از برنامه Node.js با پایگاه داده MongoDB کار کند.
این انعطافپذیری به کاربران و توسعهدهندگان اجازه میدهد تا از اکوسیستم وسیع ماژولها و کتابخانههای Node.js برای افزایش عملکرد و قابلیتهای برنامههای خود استفاده کنند. مراحل نصب نود جی اس همانطور که گفته شد، بسیار ساده و فقط کافی است که نصب کننده را اجرا و مراحل را مانند نصب هر نرمافزار دیگری دنبال کنیم که در این آموزش از آن گذر خواهیم کرد.
نصب NPM در ویندوز برای آموزش Node JS
برای نصب «NPM» یا همان «مدیر بسته نود جی اس» (Node Package Manager) در ویندوز، میتوان از ابزارهای مدیریت بسته مثل Chocolatey (+) استفاده کرد. Chocolatey نوعی چارچوب غیرمتمرکز برای نصب سریع برنامهها و ابزارها فراهم میکند. در ادامه مراحل نصب NPM آمده است.
در مرحله اول باید دستور زیر را در خط فرمان ویندوز وارد کرد.
1@powershell -NoProfile -ExecutionPolicy Bypass -Command “iex ((new-object wet.webclient).DownloadString(‘https://chocolatey.org/install.ps1’))” && SET PATH=%PATH%;%ALLUSERSPROFILE%chocolateybin
نکته: برای باز کردن پاورشل باید عبارت «PowerShell» را در منوی استارت ویندوز وارد و گزینه «Run as Administrato» را از منو انتخاب کرد.
پس از اتمام نصب، NPM روی دستگاه ویندوزی نصب میشود و به کاربر این امکان را میدهد تا به راحتی بستههای Node.js را برای پروژههای خود مدیریت و نصب کند. همچنین به سادگی و با دستور زیر نیز میتوان آخرین نسخه NPM را نصب کرد:
1npm install -g npm
برای اطمینان از نصب بودن نود جی اس و NPM نیز میتوان دستورات زیر را در خط فرمان ویندوز وارد کرد:
1node -v
2npm -v
خروجی این دستورات در صورتی که هر دو با موفقیت نصب شده باشند، به صورت زیر است:
حال با موفقیت نود جی اس و NPM روی سیستم نصب شدهاند.
آموزش ساخت پروژه در نود جی اس Node JS
در این بخش از آموزش Node JS پس از نصب NPM و همچنین نصب نود جی اس، اولین پروژه فرضی این آموزش راهاندازی خواهد شد. در این پروژه سعی شده است با استفاده از نود جی اس، متنی دلخواه در مرورگر نمایش داده شود.
برای این کار به یک فایل جاوا اسکریپت نیاز است که در این آموزش مقدماتی نود جی اس، نام این فایل MyApp.js خواهد بود. فایل نامبرده حاوی قطعه کد زیر است:
1var http = require('http');
2
3http.createServer(function (req, res) {
4 res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
5 res.end('سلام. به این آموزش نود جی اس از فرادرس خوش آمدید');
6}).listen(8080);
توضیحات قطعه کد بالا در ادامه آمده است.
- تابع require در Node.js برای بارگذاری ماژولها استفاده میشود. در این مثال، از ماژول http برای ایجاد سرور «HTTP» استفاده شده است.
- سپس برنامه سرور با استفاده از تابع createServer ایجاد شده که تابع callback را به عنوان آرگومان دریافت میکند. هر زمان که درخواستی به برنامه سرور ارسال شود، این تابع Callback فراخوانی خواهد شد.
- در داخل تابع callback، از شی res برای ارسال پاسخ متن فرضی به کلاینت استفاده شده است. تابع writeHead برای ارسال دادههای سرآیند به کلاینت استفاده میشود و تابع end اتصال را به کلاینت میبندد.
- در نهایت، از تابع Listen در شی سرور استفاده شده است تا برنامه سرور به درخواستهای کلاینت در شماره پورت 8080 گوش دهد.
حال برای اجرای برنامه کافی است که پوشه یا مسیر فایل جاوا اسکریپت ساخته شده را در خط فرمان ویندوز باز کرده و دستور Node MyApp.js را در آن اجرا کنیم.
در حال حاضر، کامپیوتر ما به عنوان نوعی سرور عمل میکند. این یعنی اگر کسی سعی کند به کامپیوتر در پورت 8080دسترسی پیدا کند، پیغام متنی «سلام. به این آموزش Node JS از مجله فرادرس خوش آمدید» را دریافت خواهد کرد. برای دیدن خروجی کافی است که آدرس http://localhost:8080 در مرورگر باز شود که خروجی آن به صورت زیر خواهد بود:
آموزش ماژول ها در Node JS
ماژولهای Node.js راهی برای کپسولهسازی کدها در واحدهایی منطقی جداگانه هستند که آن را قابل مدیریت و نگهداریتر میکنند. ماژولهای محبوب مورد استفاده در برنامههای Node.js در ادامه فهرست شدهاند.
- فریم ورک Express برای ساخت وب اپلیکیشن
- کتابخانه «Socket.io» برای ارتباطات دوطرفه بلادرنگ
- «Jade» برای رندر قالب
- درایور MongoDB برای پایگاه داده MongoDB
- ابزار «Restify» برای ساخت APIهای REST
- «Bluebird» برای مدیریت «وعده» (Promise) با ویژگیهای نوآورانه
- سایر موارد
آموزش استفاده از ماژول ها در Node.js
برای استفاده از ماژولها در برنامه Node.js، ابتدا باید آنها را با استفاده از مدیر بسته Node یا NPM نصب کنیم. برای مثال در این آموزش Node JS، ماژول Express با دستور زیر نصب شده است.
1Npm install Express
فرایند نصب بدین صورت است:
دستور بالا فایلهای لازم را که حاوی «ماژولهای اکسپرس» هستند، دانلود و نصب میکند. حال بعد از اینکه ماژول نصب شد، برای استفاده از آن باید از کلمه کلیدی require استفاده کرد. این کلمه کلیدی راهی برای گنجاندن عملکرد ماژول در آن برنامه کاربردی است که نود جی اس از آن استفاده میکند. مثال زیر برای درک این مفهوم مهم است:
1var express=require('express');
2var app=express();
3app.set('view engine','jade');
4app.get('/',function(req,res)
5{
6});
7var server=app.listen(3000,function()
8{
9});
در قطعه کد بالا از کلمه کلیدی requireبرای گنجاندن ماژولها و ایجاد اشیاء برای دسترسی به عملکرد آنها استفاده شده است. همچنین، مثال فوق از ماژول Express برای ساخت برنامههای کاربردی وب استفاده و موتور «View» را با استفاده از دستور set تنظیم میکند و با استفاده از متد Listen به پورتی خاص گوش میدهد. این مثال به طور خلاصه به مفهوم «موتورهای قالب» (Templating Engine) برای تزریق مقادیر در صفحات وب اشاره میکند.
آموزش ایجاد ماژول سفارشی در نود جی اس
برای ایجاد ماژولهای سفارشی با استفاده از Node.js، باید فرآیندی ساده را دنبال کرد که در این آموزش نود جی اس ارائه شده است. ابتدا باید فایلی جاوا اسکریپتی ساخته شود و کدی که حاوی منطق ماژول است را در آن وارد کرد. همچنین باید از کلمه کلیدی Export استفاده کنیم تا این اطمینان به وجود آید که قابلیتهای تعریف شده در فایل به وسیله فایلهای دیگر قابل دسترسی است.
برای مثال در کد زیر تابعی مانند AddNumber تعریف شده است که دو پارامتر را گرفته و آنها را با هم جمع میکند. این تابع باید به ماژول Exportاضافه شود تا آن را به تابعی عمومی تبدیل کند که به وسیله سایر ماژولهای برنامه قابل دسترسی باشد. در نهایت، برنامهای ایجاد میشود که ماژول سفارشی را فراخوانی کند. نام این فایل، Addition.js است.
1var exports=module.exports={};
2exports.AddNumber=function(a,b)
3{
4return a+b;
5};
حال در این مرحله برای تکمیل ساخت ماژول نود جی اس فایلی به نام app.js ساخته میشود که حاوی کد زیر است.
1var Addition=require('./Addition.js');
2console.log(Addition.AddNumber(1,2));
در کدهای بالا از کلمه کلیدی require برای گنجاندن عملکرد در فایل Addition.jsاستفاده شده است. از آنجایی که توابع موجود در فایل Addition.jsاکنون قابل دسترسی هستند، میتوان با تابع AddNumber ارتباط برقرار کرد. در تابع، ٢ عدد بهعنوان پارامتر ارسال خواهند شد و با اجرای برنامه در کنسول، عدد ٣ نمایش داده خواهد شد و این یعنی تابع AddNumberدر فایل Addition.jsبا موفقیت فراخوانی شده است.
گسترش ماژول در نود جی اس
در Node.js میتوان کتابخانهای را از ماژولهای رایج ایجاد کرد و در صورت نیاز، عملکرد آن ماژولها را گسترش داد. این کار با استفاده از تابع requireبرای گنجاندن ماژول مورد گسترش، سپس ایجاد تابعی برای ماژول گسترش یافته و فراخوانی تابع از فایل برنامه اصلی انجام میشود.
هنگامی که ماژول گسترش یافته فراخوانی میشود، رشته را از ماژول اصلی فراخوانی کرده و خروجی مدنظر را باز میگرداند. در مثال زیر مراحل گسترش ماژول را در این آموزش Node JS بیان شده است.
مثال گسترش ماژول در نود جی اس
مرحله ١: در قدم اول ماژول پایه فرضی به نام Tutorial.js ایجاد شده است. این فایل حاوی تابعی بوده که رشتهای را به کنسول برمیگرداند و قطعه کد آن به صورت زیر است:
1var exports=module.exports={};
2exports.tutorial=function()
3{
4console.log("Hi Faradars")
5}
مرحله ٢: در این مرحله باید ماژولی گسترش یافته ایجاد شود که فایلی به نام NodeTutorial.js است. این فایل از تابع requireبرای گنجاندن ماژول Tutorial.jsو ایجاد تابعی استفاده میکند که رشتهای را به کنسول میفرستد. همچنین تابع را از ماژول Tutorial.jsبرای خروجی رشته اصلی فراخوانی میکند. قطعه کد این فایل به صورت زیر است:
1var Tutor=require('./Tutorial.js');
2exports.NodeTutorial=function()
3{
4console.log("Node Tutorial")
5function pTutor()
6{
7var PTutor=Tutor
8PTutor.tutorial();
9}
10}
11
12Or
13var Tutor=require('./Tutorial.js');
14exports.NodeTutorial=function()
15{
16console.log("Faradars Node Tutorial")
17this.pTutor = function ()
18{
19var PTutor=Tutor
20PTutor.tutorial();
21}
22}
مرحله ٣: در این مرحله باید فایل برنامه اصلی که فایلی به نام app.js است ایجاد شود. این فایل ماژول NodeTutorial و تابع داخل آن را فراخوانی خواهد کرد و موجب ایجاد خروجی میشود. قطعه کد آن به صورت زیر است:
1var localTutor=require('./NodeTutorial.js');
2localTutor.NodeTutorial();
3localTutor.NodeTutorial.pTutor();
4
5Or use this code
6var tut = new localTutor.NodeTutorial(); // Create and save object
7tut.pTutor(); // Call function on object
در مثال بالا یاد گرفتیم که چگونه ماژول Node.js به نام NodeTutorial را گسترش دهیم، به طوری که هنگام فراخوانی آن، دو عبارت مد نظر در خروجی کنسول نمایش داده شوند. این امر با فراخوانی تابع NodeTutorialو همچنین ایجاد و فراخوانی تابع دوم به نام pTutor در ماژول به دست میآید. خروجی به صورت زیر خواهد بود:
Hi Faradars Faradars Node Tutorial
بسته انتشار NPM
بسته انتشار NPM فرآیند انتشار ماژول در مخزن «گیتهاب» است، به طوری که میتواند توسط ماشینهای دیگر کاربران نصب شود. این فرایند نیاز به طی کردن مراحل زیر دارد:
- ساخت مخزن در Github
- تنظیم نام نویسنده، ایمیل و URL
- ورود به سیستم NPM
- مقداردهی اولیه بسته
- انتشار فایلهای منبع در گیتهاب و سپس انتشار ماژول در رجیستری NPM
در ادامه نوعی ماژول آزمایشی برای انتشار آماده شده است. قبلاً در گیتهاب مخزن مد نظر ساخته شده است. حال مشخصات بسته به صورت زیر خواهد بود:
npm set init.author.name “kami” npm set init.author.email “ka......@gmail.com” npm set init.author.url http://test...url.com
ابتدا باید به NPM با دستور زیر وارد شد:
1npm login
با این کار، سایت اصلی NPM در مرورگر بازخواهد شد. اگر کاربر از قبل حساب کاربری داشته باشد، برای ورود باید رمز موقت را وارد کند و در غیر این صورت باید در سایت اصلی NPM حساب کاربری جدیدی بسازد. اگر ورود موفقیتآمیز باشد، نتیجه به صورت زیر خواهد بود:
حال باید بسته با ساخت فایلی به نام package.json با دستور زیر راه اندازی شود:
1npm init
با این کار چند سوال از کاربر در ترمینال ویندوز پرسیده خواهد شد که ترتیب این سوالها و نحوه پاسخ به آنها برای بسته آزمایشی ما به صورت تصویر زیر است:
حال نوبت به انتشار در گیتهاب فرا میرسد. این کار با اجرای دستورات زیر قابل انجام خواهد بود.
1git add.
2git commit -m "Initial release"
3git tag v0.0.1
4git push origin master --tags
در آخر هم باید بسته در گیتهاب منتشر شود که با دستور زیر این کار قابل انجام است.
1npm publish
مدیریت بسته های NPM
«Node Package Manager» عملکردهایی را به منظور نصب، فهرست کردن، بهروزرسانی، جستجو و حذف بستههای شخص ثالث برای برنامههای Node.js ارائه میدهد . این عملکردها با دستورات زیر قابل اجرا هستند.
- دستور «Install» برای نصب بستهها در سطح سراسری استفاده میشود.
- «Update» برای بهروزرسانی بستههای خاص استفاده خواهد شد.
- دستور «list» برای مشاهده همه بستههای نصب شده در سطح سراسری مورد استفاده قرار میگیرد.
- «Search» برای بررسی اینکه آیا یک بسته خاص به صورت محلی نصب شده است یا خیر استفاده میشود.
فایل package.json چیست؟
فایل package.json برای نگهداری ابر دادهها و دادههای پیکربندی پروژه استفاده میشود. این فایل معمولاً در دایرکتوری یا پوشه ریشه یک پروژه Node.js قرار دارد و حاوی اطلاعاتی مانند توضیحات پروژه، نسخه پروژه در توزیعی خاص، اطلاعات مجوز و دادههای پیکربندی است. هنگامی که یک ماژول از طریق NPM نصب میشود، با فایل package.jsonهمراه خواهد شد که حاوی شماره نسخه ماژول مورد استفاده است.
آموزش ساخت وب سرور HTTP در نود جی اس
در این بخش از آموزش Node JS، به آموزش ساخت وب سرور HTTP پرداخته خواهد شد. Node.js میتواند برای ایجاد وب سرور استفاده شود که بتواند محتوا را به کاربران ارائه دهد. در واقع نود جی اس دارای ماژولهایی مانند http و Request است که در پردازش درخواستهای مربوط به سرور کمک میکند.
در ادامه نمونهای از نحوه ایجاد برنامه وب سرور ارائه شده است، که نوعی ماژول سرور ایجاد میکند که به پورت 7000 گوش میدهد و هنگامی که درخواستی از طریق مرورگر انجام میشود، پاسخ Hi, Welcome To Faradars Mag را ارسال میکند. قطعه کد زیر برای ساخت وب سرور مورد نظر استفاده شده است:
1// Load the http module to create an http server.
2var http = require('http');
3
4// Configure our HTTP server to respond with Hello World to all requests.
5var server = http.createServer(function (request, response) {
6 response.writeHead(200, {"Content-Type": "text/plain"});
7 response.end("Hi Welcome To Faradars Mag n");
8});
9
10// Listen on port 7000, IP defaults to 127.0.0.1
11server.listen(7000);
12
13// Put a friendly message on the terminal
14console.log("Server running at http://127.0.0.1:7000/");
15
16// To run the server, open your terminal and run the command: node server.js
قطعه کد بالا باید در فایلی به نام server.js ذخیره و با دستور زیر اجرا شود:
1node server.js
در صورتی که اجرا موفقیتآمیز باشد، خروجی دستور به صورت زیر خواهد بود.
حال با بازکردن آدرس داده شده موجود در عکس بالا در مرورگر، خروجی به صورت زیر خواهد بود.
رسیدگی به درخواست های GET در Node.js
ایجاد درخواست «GET» در Node.js برای بازیابی دادهها از سایتی دیگر، نسبتاً ساده است که در این بخش از آموزش Node JS به آن پرداخته خواهد شد.
برای این کار ابتدا باید ماژول Requestرا نصب کرد. این کار را میتوان با اجرای دستور زیر در خط فرمان انجام داد:
1npm install request
هنگامی که ماژول درخواست نصب شد، خط فرمان پیامی را نشان میدهد که نام ماژول و نسخه نصب شده را به کاربر اطلاع میدهد. اکنون، میتوان از ماژول Requestبرای ارسال درخواستهای GET به وبسایتهای دیگر و بازیابی اطلاعات آنها استفاده کرد که در زیر مثالی برای آن آورده شده است: فرض کنید قطعه کد مثال مربوط به ماژول Requestبه صورت زیر باشد:
1var request = require("request");
2 request("http://www.google.com",function(error,response,body)
3 {
4 console.log(body);
5 });
قطعه کد بالا نوعی درخواست GET به «www.google.com» ارسال میکند. ماژول Requestرا میتوان برای ارسال درخواستهای GET به وبسایتها استفاده کرد. هنگامی که پاسخی دریافت میشود، پارامترها (Error،Responseو Body) مقادیر متفاوتی خواهند داشت.
Error شامل هر خطایی است که هنگام درخواست رخ داده است، در پاسخ هدرهای HTTP در پاسخ ارسال میشود و Body شامل کل محتوای Response خواهد بود. با نوشتن محتوای دریافتی در پارامتر Bodyدر فایل console.log ، کاربر میتواند هر محتوایی که از وبسایت دریافت کرده است را مشاهده کند. با اجرای دستور زیر میتوان قطعه کد بالا را اجرا کرد:
1node req.js
خروجی این دستور چیزی شبیه به تصویر زیر است:
آموزش Express JS
Express.js نوعی فریمورک کاربردی قدرتمند و کارآمد Node.js به حساب میآید که ایجاد صفحات وب و برنامههای پویا با حداقل کدنویسی را برای توسعهدهندگان فراهم میکند. «اکسپرس جی اس» مجموعه گستردهای از ویژگیها و ابزارها را فراهم خواهد کرد که به توسعهدهندگان اجازه میدهد تا بهسرعت و به راحتی برنامههای وب تکصفحهای، چندصفحهای و ترکیبی بسازند.
Express.js بخشی از پشته «MEAN» است. حروف عبارت MEAN برگرفته شده از حرف اول عبارتهای Angular.js ،Express.js ،MongoDB و Node.js است. MongoDB نوعی پایگاه داده NoSQL محسوب میشود، Express.js چارچوب برنامه کاربردی وب، Angular.js چارچوب جاوا اسکریپت «MVC» و Node.js چارچوبی است که برای توسعه برنامههای کاربردی در سمت سرور و شبکه مقیاسپذیر استفاده میشود.
همچنین Express.js رسیدگی به انواع درخواستها مانند «GET» ،«PUT» ،«POST» و «DELETE» را آسان میکند. از طرف دیگر، اکسپرس جی اس مجموعهای قوی از ویژگیها را برای ساخت برنامههای کاربردی وب کارآمد فراهم خواهد کرد و در کنار آن با ارائه محیط توسعه ساده و شهودی، فرآیند توسعه را ساده میکند.
آموزش نصب Express
برای استفاده از Express، باید از Node Package Manager برای دانلود و نصب ماژولهای مورد نیاز استفاده شود. این را میتوان با اجرای دستور NPM install express در خط فرمان یا ترمینال ویندوز به صورت زیر انجام داد.
پس از نصب، میتوان برنامه Express ایجاد کرد که ما در این آموزش Node JS ، مثالی فرضی را در نظر گرفتهایم. برای این هدف، باید ماژول سروری ایجاد شود که به شماره پورت 3000 گوش میدهد. اگر درخواستی از طریق مرورگر در این شماره پورت انجام شود، برنامه سرور با پیام مدنظر به کلاینت پاسخ میدهد. در اینجا مثالی از نحوه ایجاد این برنامه با استفاده از Express آورده شده است.
1var express=require('express');
2var app=express();
3app.get('/',function(req,res)
4{
5res.send('Hello, welcome to this Node.js tutorial from Faradars');
6});
7var server=app.listen(3000,function() {});
حال با دستور زیر میتوان برنامه را اجرا کرد.
1node expresstet
خروجی دستور بالا در مرورگر به صورت تصویر زیر خواهد بود:
کد فوق از ماژول Express برای ایجاد سروری استفاده میکند که به درخواستهای پورت 3000با پیام مدنظر ما پاسخ میدهد. کد بالا این کار را با گنجاندن ماژول Express با استفاده از تابع require ، ایجاد برنامه Express با تابع express() ، ایجاد یک کنترل کننده مسیر برای URL ریشه با استفاده از تابع app.get() و راهاندازی سرور با listen() انجام میدهد.
Routes چیست؟
«مسیرها» (Routes) تعیین میکنند که چگونه برنامه کاربردی به درخواست مشتری به یک نقطه پایانی خاص پاسخ میدهد. «سینتکس» (Syntax) آن به صورت زیر است:
1app.METHOD(PATH, HANDLER)
شرح سینتکس فوق در ادامه آمده است.
- app نمونهای از ماژول اکسپرس است.
- METHOD نوعی متد درخواست HTTP «GET، POST، PUT یا DELETE» به حساب میآید.
- PATH مسیر در سرور است.
- HANDLER نوعی عملکرد یا تابع محسوب میشود که اگر مسیر مطابقت داشته باشد، اجرا خواهد شد.
در ادامه مثالی از نحوه پیادهسازی مسیرها در اکسپرس ارائه شده است:
- مسیر Node که رشته Faradars Node.js Tutorial را نمایش خواهد داد.
- شاخه Angular که رشته Faradars Angular Tutorial را نمایش میدهد.
- مسیر پیشفرض که رشته Welcome to Faradars Mag را به نمایش درخواهد آورد.
قطعه کد مثال فوق به صورت زیر است:
1
2var express = require('express');
3var app = express();
4
5// Add route for '/'
6app.get('/', function(req, res) {
7 res.send('Welcome to Faradars Mag');
8});
9
10// Add route for '/Node'
11app.get('/Node', function(req, res) {
12 res.send('Faradars Node.js Tutorial');
13});
14
15// Add route for '/Angular'
16app.get('/Angular', function(req, res) {
17 res.send('Faradars Angular Tutorial');
18});
19
20// Start server
21app.listen(3000, function() {
22 console.log('Server is listening on port 3000');
23});
24
اجرای کدهای بالا با دستور زیر صورت میگیرد.
1node server.js
برنامه فوق در فایلی به نام server.js ذخیره شده که خروجی آن به شرح موارد زیر است:
١- خروجی مسیر پیشفرض در پورت 3000 به صورت زیر خواهد بود:
خروجی مسیر /Node به صورت زیر خواهد بود:
خروجی مسیر /Angular به صورت زیر خواهد بود:
ساخت وب سرور با اکسپرس
«Node.js Express» میتواند برای ایجاد وب سرور با مسیریابی سریع و آسان استفاده شود. برای این کار به «Jade» نیاز است که آن را میتوان از طریق Node Package Manager با دستور زیر نصب و برای قالببندی استفاده کرد.
1npm install jade
در زیر، قطعه کد وب سروری ساده آورده شده که با اکسپرس ساخته شده است:
1var express=require('express');
2var app=express();
3app.set('view engine','jade');
4app.get('/',function(req,res)
5{
6res.render('index',
7{title:'Faradars',message:'Welcome To Faradars Mag'})
8});
9var server=app.listen(3000,function() {});
اولین قدم در راهاندازی برنامه، مشخص کردن موتور نمایشی است که برای رندر کردن قالبها استفاده میشود. در مثال فوق از «Jade» به عنوان موتور نمایش استفاده شده است. سپس از تابع render برای رندر قالب به نام index.jade استفاده شده و مقادیر رشتهای Faradars و Welcome To Faradars Mag به ترتیب به پارامترهای title و message منتقل شدهاند. هنگامی که دستور به درستی اجرا شود، خروجی در مرورگر نشان داده میشود و به ترتیب مقادیر Faradarsو Welcome To Faradars Magرا در عنوان و پیام درج میکند.
قطعه کد بالا در فایلی به نام webserver.js ذخیره شده است و با دستور زیر در ترمینال ویندوز اجرا خواهد شد:
1node webserver.js
حال خروجی به صورت تصویر زیر خواهد بود:
آموزش Node JS و MongoDB
Node JS نوعی فریم ورک کاربردی وب محبوب است که میتواند برای کار با پایگاه دادههای رابطهای و غیر رابطهای استفاده شود. در این بخش از آموزش Node JS نحوه استفاده از Node.js و MongoDB را برای ایجاد نوعی اپلیکیشن خرید تحت وب خواهیم آموخت. همچنین یاد خواهیم گرفت که چگونه یک برنامه Node Express با MongoDB برای ذخیره و ارائه محتوا بسازیم.
پایگاه های داده NoSQL و نود جی اس
Node.js قادر است با هر دو پایگاه داده «MySQL» و «MongoDB» کار کند. برای استفاده از هر یک از این پایگاههای داده، ماژولهای مربوطه «MySQL» و «Mongoose» باید با استفاده از NPM نصب شوند. با این ماژولها، Node.js میتواند اتصال به پایگاه داده را ایجاد و کوئریها را اجرا و دادهها را دستکاری کند.
نحوه استفاده نود جی اس از MongoDB چگونه است؟
در قالب مثالی عملی نحوه کار MongoDB با نود جی اس در این بخش بررسی خواهد شد. فرض بر این است که پایگاه دادهای به نام EmployeeDB و مجموعهای به به نام Employee موجود باشد.
1Documents
2{
3 {Employeeid : 1, Employee Name : Guru99},
4 {Employeeid : 2, Employee Name : Joe},
5 {Employeeid : 3, Employee Name : Martin},
6}
١- نصب ماژولهای NPM: ابتدا باید با دستور زیر MongoDB را نصب کرد:
1npm install mongodb
٢- ایجاد و بستن اتصال به پایگاه داده: حال نوبت به ایجاد و بستن اتصال به پایگاه داده MongoDB خواهد رسید که با قطعه کد زیر این کار انجام میشود.
1var MongoClient = require('mongodb').MongoClient;
2var url = 'mongodb://localhost/EmployeeDB';
3
4MongoClient.connect(url, function(err, db) {
5 console.log(Connected);
6 db.close();
7 });
کدهای فوق مربوط به نحوه اتصال به پایگاه داده MongoDB با استفاده از ماژول Mongoose میشوند. اولین مرحله شامل اضافه کردن ماژول و سپس مشخص کردن رشته اتصال به پایگاه داده خواهد بود. در صورت موفقیت آمیز بودن اتصال، رشته در کنسول نوشته خواهد شد و اتصال بسته میشود.
٣- پرس و جو برای دادهها در پایگاه داده MongoDB: با استفاده از درایور MongoDB، میتوان پایگاه داده EmployeeDB را برای اطلاعات موجود در مجموعه Employee جستجو کرد. این مجموعه شامل تمام اسناد مربوط به کارمندان است که هر کدام دارای شناسه شی، نام کارمند و شناسه کارمند هستند. برای واکشی تمام اسناد موجود در مجموعه کارمند، میتوان از درایور MongoDB برای اجرای پرسوجو استفاده کرد. قطعه کد انجام این کار به صورت زیر خواهد بود:
1var MongoClient = require('mongodb').MongoClient;
2var url = 'mongodb://localhost/EmployeeDB';
3
4MongoClient.connect(url, function(err, db) {
5
6 var cursor = db.collection('Employee').find();
7
8 cursor.each(function(err, doc) {
9
10 console.log(doc);
11
12 });
13});
در کد بالا، متُد MongoClient.connect برای اتصال به پایگاه داده MongoDB استفاده میشود. همچنین نوعی cursor در کدهای بالا ایجاد میشود که به رکوردهای مجموعه Employee اشاره میکند. سپس از cursorبرای تکرار در رکوردهای مختلف در پایگاه داده استفاده خواهد شد و تابعی اجرا میشود که محتویات هر سند را در کنسول چاپ میکند. همچنین میتوان با تعیین شرایط جستجو در تابع find() رکوردی خاص را از پایگاه داده دریافت کرد.
۴- درج اسناد در مجموعه: کتابخانه MongoDB متد insertOne را برای درج اسناد در مجموعه فراهم میکند. مثال زیر نحوه استفاده از متد insertOneرا برای درج سند در مجموعه Employeeنشان میدهد. جزئیات سند در کد مشخص شده است. برای بررسی اینکه دادهها با موفقیت درج شدهاند، میتوان دستورات Use EmployeeDB و db.Employee.find({Employeeid :4 }) را در MongoDB اجرا کرد.
1var MongoClient = require('mongodb').MongoClient;
2var url = 'mongodb://localhost/EmployeeDB';
3
4MongoClient.connect(url, function(err, db) {
5
6 db.collection('Employee').insertOne({
7 Employeeid: 4,
8 EmployeeName: "NewEmployee"
9 });
10});
۵- بهروزرسانی اسناد در مجموعه: اسناد را میتوان را در مجموعه با استفاده از متد updateOne ارائه شده توسط کتابخانه MongoDB بهروز کرد. قطعه کد زیر نحوه بهروزرسانی یک سند در مجموعه mongoDB را نشان میدهد.
1var MongoClient = require('mongodb').MongoClient;
2var url = 'mongodb://localhost/EmployeeDB';
3
4MongoClient.connect(url, function(err, db) {
5
6 db.collection('Employee').updateOne({
7 "EmployeeName": "NewEmployee"
8 }, {
9 $set: {
10 "EmployeeName": "Mohan"
11 }
12 });
13});
۶- حذف اسناد در مجموعه: اسناد را میتوان در مجموعه با استفاده از متد deleteOne ارائه شده به وسیله کتابخانه MongoDB حذف کرد. قطعه کد زیر نحوه حذف سند در مجموعه mongoDBرا نشان میدهد.
1var MongoClient = require('mongodb').MongoClient;
2var url = 'mongodb://localhost/EmployeeDB';
3
4MongoClient.connect(url, function(err, db) {
5
6 db.collection('Employee').deleteOne(
7
8 {
9 "EmployeeName": "Mohan"
10 }
11
12 );
13});
آموزش وعده ها در Node JS
«وعدهها» (Promises) پیشرفتی برای «توابع پاسخ به تماس» (Callback Functions) در Node.js هستند. آنها به کاهش مشکلات مرتبط با تودرتو کردن چندین تابع پاسخ به تماس در طول چرخه عمر توسعه کمک میکنند.
سینتکس اولیه وعده با فراخوانی «doSomethingAync » یا تابع ناهمزمان و عبارت «then » تعریف میشود که مقدار «onFulfilled » را برای عملیات موفق و مقدار «onRejected » را برای خطا مشخص میکند.
1var promise = doSomethingAync()
2promise.then(onFulfilled, onRejected)
پاسخ به وعده ها
در این بخش از آموزش Node JS، مثالی از کاربرد وعدهها در نود جی اس بررسی خواهد شد. برای این هدف ابتدا باید با دستور زیر ماژول وعدهها را نصب کرد:
1npm install promise
حال نوبت به ایجاد کدی است که از وعدهها در نود جی اس استفاده کند که کد زیر مربوط به این هدف است.
1var Promise = require('promise');
2var MongoClient = require('mongodb').MongoClient;
3var url = 'mongodb://localhost/EmployeeDB';
4
5MongoClient.connect(url)
6 .then(function(err, db) {
7 db.collection('Employee').updateOne({
8 "EmployeeName": "Martin"
9 }, {
10 $set: {
11 "EmployeeName": "Mohan"
12 }
13 });
14 });
در قطعه کد بالا، متُد MongoClient.connect برای ایجاد اتصال به پایگاه داده MongoDB استفاده میشود و سپس از تابع then برای اجرای قطعه کد استفاده خواهد شد که EmployeeName کارمند را با نام Martin به Martin بهروز میکند.
وعده های تودرتو در نود جی اس
برخورد با وعدههای تودرتو در نود جی اس از مباحث بسیار مهمی است که در این بخش از آموزش Node JS در قالب مثالی ساده به آن پرداخته خواهد شد. قطعه کد مثال مربوط به این بخش به صورت زیر است:
1var Promise = require('promise');
2var MongoClient = require('mongodb').MongoClient;
3var url = 'mongodb://localhost/EmployeeDB';
4MongoClient.connect(url)
5
6.then(function(db) {
7 db.collection('Employee').insertOne({
8 Employeeid: 4,
9 EmployeeName: "NewEmployee"
10 })
11
12 .then(function(db1) {
13 db1.collection('Employee').insertOne({
14 Employeeid: 5,
15 EmployeeName: "NewEmployee1"
16 })
17 })
18});
در کد فوق از ۲ عبارت thenبرای درج رکوردها در پایگاه داده MongoDB استفاده شده است. در بند اول، از پارامتر db برای دسترسی به مجموعه و از متد insertOne برای درج سند در مجموعه Employee استفاده شده است. عبارت thenدر مثال بالا برای درج رکورد دوم استفاده میشود. در نهایت و پس از اجرای کدها، ۲ رکورد به پایگاه داده MongoDB اضافه خواهند شد.
ساخت وعده سفارشی در نود جی اس
برای ایجاد وعده سفارشی، کتابخانه «q» باید نصب و استفاده شود که این کار با دستور زیر در ترمینال قابل انجام است:
1npm install q
اگر نصب موفقیت آمیز باشد به صورت زیر خواهد بود:
در ادامه مثالی برای ساخت وعده سفارشی آورده شده است:
1var Q = require('q');
2
3function Add() {
4 var a, b, c;
5 a = 5;
6 b = 6;
7 c = a + b;
8 return Q.resolve(c);
9}
10
11var Display_promise = Q.denodeify(Add);
12
13Display_promise()
14 .then(function(result) {
15 console.log('Addition function completed: ' + result);
16 });
در کد بالا، کتابخانه q با استفاده از کلمه کلیدی require وارد شده است. همچنین تابعی به نام Add ایجاد شده که دو عدد را که در متغیرهای a و b ذخیره کرده و آنها را با هم جمع میکند و مجموع این مقادیر را در متغیر c ذخیره خواهد کرد.
در مثال فوق همچنین از کتابخانهqاستفاده شده تا تابع Addرا حذف کرده و آن را به تابعی تبدیل کند که وعده را برمیگرداند. همچنین تابع Addفراخوانی شده و مقدار وعده بازگشتی دریافت شده است. در آخر هم از کلمه کلیدی then استفاده شده تا مشخص شود که اگر عملکرد با موفقیت اجرا شود، «Addition function completed » در console.log نمایش داده شود.
Bluebird JS چیست؟
«Bluebird JS» نوعی کتابخانه نود جی اس مبتنی بر وعده است که توسعهدهندگان را قادر میسازد تا با وعده دادن به ماژولهای Node به صورت ناهمزمان از آنها استفاده کنند. میتوان از آن برای اجرای ناهمزمان MongoDB استفاده و فرآیند نوشتن برنامههای Node.js را سادهتر کرد. نمونهای از استفاده از آن، برقراری ارتباط با EmployeeDB در مثال بالا، برای گرفتن تمام رکوردها از مجموعه Employee و نمایش آنها در کنسول است.
ساخت وعده با کتابخانه Bluebird JS
برای ساخت وعده با کتابخانه Bluebird JS چند قدم مورد نیاز است که اولین قدم آن نصب کتابخانه Bluebird JS خواهد بود که با دستور زیر قابل انجام است:
1npm install bluebird
ساخت وعده با این کتابخانه در قالب مثالی کاربردی بررسی خواهد شد که قطعه کد مثال مورد نظر ما به صورت زیر است:
1var Promise = require('bluebird');
2
3var mongoClient = Promise.promisifyAll(require('mongodb')).MongoClient;
4
5var url = 'mongodb://localhost/EmployeeDB';
6mongoClient.connectAsync('mongodb://localhost/EmployeeDB')
7
8.then(function(db) {
9 return db.collection('Employee').findAsync({})
10
11 })
12 .then(function(cursor) {
13 cursor.each(function(err, doc) {
14 console.log(doc);
15 })
16 });
مرحله بعدی این خواهد بود که ماژول bluebird به کدها اضافه و از آن برای وعده دادن به ماژول MongoDB استفاده شود که در کدهای بالا این عمل قابل مشاهده است. وعده دادن به کتابخانه یعنی این که هر متدی که در آن وجود دارد نوعی وعده را برمیگرداند که این کار میتواند به وسیله bluebird مدیریت شود.
همچنین دستور require برای گنجاندن کتابخانه Bluebird و متد promisifyAll() برای ایجاد نسخهای غیر همگام از هر متد در ماژول MongoDB استفاده میشود و برای هر فراخوانی متد وعدهای را برمیگرداند.
مرحله آخر اتصال به پایگاه داده، بازیابی تمام رکوردهای مجموعه و نمایش آنها در کنسول است که خروجی آن به صورت تصویر زیر خواهد بود:
مولد در نود جی اس چیست؟
«ژنراتورها» (مولدها | Generators) عملکردهای خاصی هستند که میتوانند در هر نقطهای متوقف و از سر گرفته شوند. آنها در نود جی اس برای «اجرا با تأخیر» (Lazy Load) استفاده میشوند، به این معنی که مقادیر فقط در صورت نیاز از ژنراتور گرفته میشوند. ژنراتورها دو متد اصلی زیر را دارند:
- «Next»
- «Yield»
متد Yield در تابعی برای توقف اجرا در خطی خاص فراخوانی میشود و متد Next از برنامه اصلی برای از سرگیری اجرای تابعی فراخوانی خواهد شد که دارای متد Yieldاست. اجرای برنامه تا متد Yieldبعدی یا فراخوانی آخرین متد ادامه خواهد داشت.
مثالی از ژنراتور در نود جی اس
در زیر مثالی از ژنراتور برای درک بهتر آورده شده است:
1function* Add(x) {
2 yield x + 1;
3 var y = yield(null);
4 y = 6
5 return x + y;
6}
7
8var gen = Add(5);
9
10gen.next();
11
12gen.next();
در تابع مولد Add() قطعه کد بالا از کلمه کلیدی Yieldبرای توقف عملکرد استفاده شده است. هنگامی که تابع با مقدار 5 فراخوانی میشود، این مقدار به پارامتر x نسبت داده خواهد شد. سپس تابع next() فراخوانی میشود که اجرای تابع Add()را از سر میگیرد. بعد از آن عبارت اجرای تابع را مجدداً متوقف میکند و تابع next()دوباره فراخوانی میشود. این کار اجرا را از سر میگیرد و مقدار x=5 و y=6 باهم جمع شده و نتیجه برگردانده میشود.
پاسخ به تماس در مقابل ژنراتورها
از ژنراتورها برای حل مشکل «جهنم کالبک» (callback hell) استفاده میشود، یعنی زمانی که توابع Callback در طول توسعه یک برنامه Node.js بیش از حد تودرتو میشوند. ژنراتورها میتوانند در ایجاد توابع تایمر مفید باشند که در ادامه مثالی برای درک بهتر آن آورده شده است. مثال زیر این تابع را با تأخیرهای ۱۰۰۰، ۲ هزار و ۳ هزار میلیثانیه فراخوانی میکند. گام نخست تعریف تابع تماس با اعمال تاخیر زمانی لازم است و قطعه کد آن در ادامه ملاحظه میشود.
1function Timedelay(ptime, callback) {
2
3setTimeout(function() {
4
5 callback("Pausing for " + ptime);
6
7 }, time);
8}
در قطعه کد بالا، تابعی به نام Timedelay ایجاد شده است که دو پارامتر دارد: ptime برای زمان تأخیر برحسب میلیثانیه و callback برای تابعی که باید پس از تأخیر اجرا شود. همچنین پیامی در داخل تابع برای نشان دادن زمان تأخیر ایجاد شده و از تابع setTimeout برای به تأخیر انداختن اجرای فراخوان استفاده شده است. پس از سپری شدن تأخیر، callbackبا پیام داخل خودش به عنوان پارامتر آن اجرا میشود. تابع Timedelayاساساً تأخیر را معرفی کرده و پس از پایان تأخیر، تابع callbackرا اجرا میکند.
در مرحله ٢، نوبت به استفاده از callbacks میرسد. کد زیر نشان میدهد که چگونه میتوان تماسهای برگشتی را برای تأخیرهای 1000 ، 2000 و 3000 میلیثانیه پیادهسازی کرد. برای این هدف از تابع setTimeout برای به تأخیر انداختن اجرای هر تابع callbackبر اساس زمان تأخیر مشخص شده، استفاده شده است. با اضافه کردن توابع callback، میتوان مطمئن شد که هر تابع فقط پس از سپری شدن تأخیر اجرا میشود، که این شرایط میتواند برای «برنامه نویسی ناهمگام» (Asynchronous Programming) در جاوا اسکریپت مفید باشد.
1Timedelay(1000, function(message) {
2
3 console.log(msg);
4 Timedelay(2000, function(message) {
5
6 console.log(msg);
7 Timedelay(3000, function(message) {
8
9 console.log(msg);
10 })
11 })
12}
کدهای فوق اجرای تابعهای callbacks را بر اساس بازههای زمانی مختلف نشان میدهد. تابع Timedelay چندین بار با مقادیر تأخیر مختلف با استفاده از callbacksفراخوانی میشود. با این حال، با افزایش تعداد تماسها، مدیریت کد پیچیدهتر و سختتر خواهد شد. گام سوم پیاده سازی کدهای بالا این بار با استفاده از ژنراتورها یا مولدها است که این کار به صورت زیر قابل انجام خواهد بود:
1function* Messages() {
2 console,log(yield(Timedelay(1000, function(){})));
3 console,log(yield(Timedelay(2000, function(){})));
4 console,log(yield(Timedelay(3000, function(){})));
5}
کد فوق نحوه پیادهسازی تابع Timedelay را با استفاده از ژنراتورها نشان میدهد. در کدهای بالا نوعی تابع مولد به نام Messages تعریف شده و برای فراخوانی تابع Timedelayاستفاده میشود. تابع Yield برای فراخوانی Timedelayبا زمانهای تأخیر متفاوت استفاده میشود که درک کدها را در مقایسه با رویکرد برگشتی سادهتر میکند. به طور کلی، کدهای فوق نشان میدهد که چگونه ژنراتورها میتوانند برنامه نویسی ناهمزمان را در Node.js ساده کنند.
آموزش جریان فایل در Node.js
در Node.js، جریان یا استریم دادهها به طور گستردهای برای انتقال داده یا اطلاعات استفاده میشوند. به عنوان مثال، هنگام استفاده از تابع console.log برای خروجی دادهها به کنسول، نوعی جریان استفاده میشود.
علاوه بر این، Node.js اجازه میدهد تا دادهها از فایلها استریم شوند، که این امر خواندن و نوشتن آنها را آسانتر میکند. به منظور نشان دادن نحوه استفاده از استریم در نود جی اس برای خواندن و نوشتن از فایلها در این آموزش Node JS مثالی در ادامه مورد بررسی قرار گرفته است.
مثالی از جریان فایل در نود جی اس
برای ارائه مثالی کاربردی لازم است که در ابتدا فایلی به نام data.txt یا هر نام دلخواه دیگری را در حافظه محلی کامپیوتر ذخیره کنیم. فایل متنی فرضی ما برای این کار حاوی دو جمله متنی زیر است:
حال نوبت به نوشتن کدهای استریم برای خواندن فایل است، که قطعه کد آن به صورت زیر خواهد بود:
1var fs = require("fs");
2var stream;
3stream = fs.createReadStream("D://node-stream/data.txt");
4
5stream.on("data", function(data) {
6 var chunk = data.toString();
7 console.log(chunk);
8});
در کدهای بالا، ماژول fs برای ایجاد جریان استفاده شده است. همچنین از متد createReadStream برای ایجاد استریم قابلخواندن استفاده و مسیر فایل data.txtبه آن داده شده است. در کد فوق تابع stream.on نوعی کنترل کننده رویداد محسوب میشود که وقتی دادهها از فایل خوانده میشوند، نوعی تابع فراخوانی را اجرا میکند.
همچنین تابع callbackدادهها را به رشته تبدیل کرده و به کنسول ارسال میکند. هر تکه داده از جریان خوانده شده و به رشته تبدیل خواهد شد و سپس به عنوان خروجی به کنسول ارسال میشود. حال با دستور زیر برنامه نوشته شده قابل اجرا خواهد بود.
1node index.js
خروجی دستور بالا به صورت تصویر زیر است:
نوشتن در فایل
این بخش از آموزش Node JS مربوط به قابلیت نوشتن در فایل است که این عمل روی مثال فرضی بالا قرار است انجام شود. قطعه کد لازم برای انجام این کار به منظور نوشتن در فایل به صورت زیر است.
1var fs = require("fs");
2var stream;
3stream = fs.createWriteStream("D://data.txt");
4
5stream.write("مجله فرادرس")
6stream.write("آموزش نو د جی اس")
7stream.write("آموزش جاوا اسکریپت")
8stream.write("آموزش برنامه نویسی")
9stream.write("آموزش رایگان برنامه نویسی ")
10stream.write("آموزش فریمورک های جاوا اسکریپت ")
کد بالا نشان میدهد که استریم قابل نوشتن را میتوان با متد fs.createWriteStream ایجاد کرد و مکان فایل داده مدنظر را به عنوان ورودی ارائه کرد. سپس میتوان از متد stream.write برای نوشتن داده در فایل استفاده کرد که در فایل داده ذخیره میشود. با باز کردن فایل data ، دادههایی که روی آن نوشته شده است، نمایش داده میشود. خروجی قطعه کد بالا به صورت زیر خواهد بود:
Pipe در نود جی اس
استفاده از «لوله» (Pipe) در برنامه Node راهی عالی برای انتقال مؤثر دادهها از یک فایل به فایل دیگر است. برای انجام این کار، میتوانی از متد pipe() استفاده کرد که دو آرگومان میگیرد: جریانی قابل نوشتن که به عنوان مقصد داده عمل میکند و شی اختیاری. برای درک بهتر استفاده از Pipe در ادامه این بخش از آموزش Node JS، مثالی فرضی ارائه شده است.
در گام اول فرض بر این است که فایلی متنی به نام datainput.txt در «دارایو D» کامپیوتر ما ذخیره شده که حاوی دادههای زیر است:
حال در این مرحله فایلی خالی به نام dataOutput.txt ایجاد و در همان درایو D ذخیره خواهد شد.
حال با قطعه کد زیر انتقال داده از فایل datainput.txt به فایل dataOutput.txt انجام خواهد شد.
1var fs = require("fs");
2var readStream = fs.createReadStream("D://datainput.txt");
3var writeStream = fs.createWriteStream("D://dataOutput.txt");
4readStream.pipe(writeStream);
کد بالا انجام انتقال دادهها از فایلی به فایل دیگر را با استفاده از Readstream و Writstream انجام میدهد. Readstreamبرای فایلی که حاوی دادههایی است که باید منتقل شوند و Writstreamبرای فایل خالی که مقصد دادهها است ایجاد میشود. سپس دستور pipe برای انتقال دادهها از Readstreamبه Writstreamاستفاده میشود. که با اجرای دستور زیر این کار انجام خواهد شد.
1node index.js
خروجی دستور بالا به صورت زیر خواهد بود:
آموزش رویدادها در Node JS
Node.js نوعی چارچوب رویداد محور است که حول مفهوم رویدادها میچرخد. رویدادها در جاوا اسکریپت و نود جی اس اَعمال یا اتفاقهایی هستند که در سیستم رخ میدهند، مانند کلیک کردن کاربر روی دکمهای در صفحه وب یا برقراری ارتباط با پایگاه داده و بسیاری از موارد دیگر را هم میتوان نام برد. برنامه نویسی مبتنی بر رویداد برای ایجاد توابعی استفاده میشود که هنگام وقوع رویدادهای خاص فعال میشوند. برای درک بهتر رویدادها، طبق روال عادی این آموزش Node JS با مثالی عملی به دنبال این مفهوم خواهیم رفت.
با استفاده از ماژول events میتوان رویدادها را در Node.js ایجاد کرد. برای نشان دادن این موضوع در مثال زیر رویدادی به نام data receivedایجاد شده است. هنگامی که این رویداد فعال شود، متن data received به کنسول ارسال میشود.
1var events = require('events');
2var eventEmitter = new events.EventEmitter();
3eventEmitter.on('data_received', function() {
4 console.log('data received succesfully.');
5});
6
7eventEmitter.emit('data_received');
برای این هدف ابتدا به ماژول events و شیئی به نام eventEmitter نیاز است. سپس، رویداد data receivedرا باید به یک تابع فراخوانی متصل کرد که پیغام data receivedرا به کنسول ثبت میکند. در نهایت، به صورت دستی رویداد data receivedبا تابع eventEmitter.emit فعال خواهد شد. خروجی مثال فوق در ترمینال به صورت زیر خواهد بود.
انتشار رویدادها در نود جی اس
هنگام تعریف رویدادها در نود جی اس، رویکردهای مختلفی وجود دارند که میتوان اتخاذ کرد و ۳ تا از مهمترین این رویکردها در ادامه آمده است.
- «کنترل کننده رویداد یکباره» (One time event handlers): از Once() میتوان برای واکنش به رویداد فقط در اولین بار استفاده کرد.
- «بازرسی شنوندگان رویداد» (Inspecting Event Listeners): از EventEmitter.listenerCount() میتوان برای تعیین تعداد شنوندگان پیوست شده به رویدادی خاص استفاده کرد.
- «رویداد newListener»: رویداد newListener هر بار که رویداد کنترل کننده جدید ثبت میشود، منتشر خواهد شد و برای شناسایی کنترلکنندههای رویداد جدید مورد استفاده قرار میگیرد.
JasmineJS چیست؟
«Jasmine» نوعی کتابخانه جاوا اسکریپت منبع آزاد (اوپن سورس) و محبوب است که برای آزمایش انواع برنامه جاوا اسکریپت استفاده میشود. این کتابخانه از «توسعه رفتار محور» (Behavior Driven Development | BDD) پیروی میکند تا اطمینان حاصل شود که هر خطِ کد جاوا اسکریپت به درستی روی آن «تست واحد» (Unit Test) انجام شده باشد.
این ابزار به تست واحد خودکار که معمولاً هنگام توسعه و استقرار برنامههای کاربردی وبِ مُدرن استفاده میشود، کمک زیادی خواهد کرد. در این بخش از آموزش Node JS مروری بر Jasmine برای آزمایش برنامههای ساخته شده با Node.js خواهیم داشت.
Jasmine برای تست برنامه های Node.js
Jasmine نوعی فریمورک تست جاوا اسکریپت محسوب میشود که برای صفحات وب، پروژههای Node.js و سایر برنامههایی بسیار مناسب است که از جاوا اسکریپت استفاده میکنند. برای شروع استفاده از آن، باید ماژولهای لازم را دانلود و نصب و در کنار آن محیط را با آن مقداردهی اولیه کرد. در نهایت میتوان فایل پیکربندی Jasmine را بازبینی کرد و از آن بهره برد. مراحل استفاده از Jasmine برای استفاده از آن در آزمایش برنامههای نود جی اس به صورت زیر است.
١- نصب ماژول Jasmine: قدم اول نصب ماژولهای NPM است که با دستور زیر امکانپذیر خواهد بود.
1npm install jasmine-node
٢- راهاندازی محیط Jasmine: برای شروع کار با Jasmine، دستور مقداردهی اولیه محیط باید اجرا شود. این دستور یک دایرکتوری مشخصات و نوعی فایل پیکربندی «جیسون» (JSON) ایجاد میکند. در محیط Jasmine دایرکتوری spec برای ذخیره تمام فایلهای آزمایشی استفاده میشود، در حالی که فایل JSON اطلاعات پیکربندی را ذخیره میکند. دستور مقداردهی اولیه به صورت زیر است:
1npx jasmine init
2یا
3jasmine init
٣- بازبینی و بررسی فایل پیکربندی: فایل پیکربندی Jasmine معمولاً در پوشه spec/support با نام jasmine.json ذخیره میشود. این فایل تمام فایلهای منبع و فایلهای مشخصاتی را فهرست میکند که باید در Jasmine runner گنجانده شوند. تصویر زیر نمونهای از ظاهر فایل jasmine.jsonرا نشان میدهد:
آزمایش برنامه نود جی اس با Jasmine
در این بخش از آموزش Node JS برای درک فرآیند آزمایش برنامه Nodejs با Jasmine مثالی عملی ارائه خواهد شد. در مثال فرضیِ پیشرو، ماژولی تعریف شده است که ۲ عدد را باهم جمع میکند که باید نتیجه درستیِ حاصل از آن آزمایش شود. سپس کدی جداگانه برای تست آن تعریف شده است و در نهایت از jasmine برای تست تابع جمع کننده دو عدد استفاده خواهد شد.
١- نوشتن قطعه کد برنامه: قطعه کد برنامه به صورت زیر است.
1var exports=module.exports={};
2exports.AddNumber=function(a,b)
3{
4return a+b;
5};
در قطعه کد بالا کلمه کلیدی EXPORT به کاربر امکان میدهد تا عملکرد تعریف شده در فایل را برای فایلهای دیگر در دسترس قرار دهد. همچنین تابعی به نام AddNumber تعریف شده است که دو پارامتر a و b را میگیرد و مجموع آنها را برمیگرداند. سپس این تابع به ماژول EXPORTاضافه میشود تا آن را عمومی و در دسترس سایر ماژولهای برنامه قرار دهد.
٢- نوشتن قطعه کد آزمایش برنامه: قطعه کد آزمایش برنامه با Jasmine به صورت زیر است.
1var app=require("C:UsersOrasDesktopFaradars-jasmineAdd.js");
2describe("Addition",function(){
3it("The function should add 2 numbers",function() {
4var value=app.AddNumber(5,6);
5expect(value).toBe(11);
6});
7});
در قطعه کد بالا ماژول آزمایشی برای تابع AddNumber در فایل App.js با دادن نام و توضیحات تست با استفاده از متدهای describe() و it() آغاز میشود. سپس متد AddNumberبا دو پارامتر 5 و 6 فراخوانی شده و مقدار بازگشتی در متغیری به نام value ذخیره خواهد شد. در نهایت، مقایسه یا آزمایش با استفاده از متد expect() انجام میشود تا اطمینان حاصل شود که مقدار بازگشتی برابر با مقدار مورد انتظار 11 است. با دستور زیر میتوان آزمایش برنامه را شروع کرد:
1jasmine App.js
خروجی دستور بالا به صورت تصویر زیر خواهد بود که این نشان میدهد که آزمایش با موفقیت انجام شده است:
سخن پایانی
نود جی اس یکی از اصلیترین فناوریهای توسعه وب در سمت سرور به حساب میآید که امروزه از آن استفاده میکنند. توسعه وب در سمت سرور با این فناوری نسبت به قبل بسیار پیشرفت کرده و آسانتر شده است. در این مطلب از «مجله فرادرس» سعی بر این بود که آموزش Node JS به صورت پروژه محور و با بیانی ساده ارائه شود.
در مطلب فوق از نحوه نصب نود جی اس گرفته تا نحوه کار با پایگاه دادههای مونگو دی بی در نود جی اس، کار با فایلها در نود جی اس، ساخت وب سرورها با نود جی اس، رویدادها در نود جی اس، کار با فریمورکهای محبوب نود جی اس و بسیاری از موارد دیگر توضیحاتی ارائه شد اما با این حال برای درک بهتر و عمیق شدن در نود جی اس توصیه میتوان از آموزشهای نود جی اس فرادرس استفاده کرد.