آموزش 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 اجازه میدهد تا عملیات «ورودی/خروجی» را در پسزمینه اجرا کند و به پاسخدهی به درخواستهای دیگر ادامه دهد. در مقابل، سایر انواع زبانهای برنامه نویسی، قبل از رفتن به خط بعدی منتظر میمانند تا کل فایل خوانده شود. مثالی ساده از این عملکرد در کدهای زیر آورده شده است:
var fs = require('fs');
fs.readFile("Sample.txt",function(error,data)
{
console.log("Reading Data completed");
});
در مثال فوق، 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 برای افزایش عملکرد و قابلیتهای برنامههای خود استفاده کنند. مراحل نصب نود جی اس همانطور که گفته شد، بسیار ساده و فقط کافی است که نصب کننده را اجرا و مراحل را مانند نصب هر نرمافزار دیگری دنبال کنیم که در این آموزش از آن گذر خواهیم کرد.
نصب سرویس Node.js روی وب سرور | راهنمای جامع
نصب NPM در ویندوز برای آموزش Node JS
برای نصب «NPM» یا همان «مدیر بسته نود جی اس» (Node Package Manager) در ویندوز، میتوان از ابزارهای مدیریت بسته مثل Chocolatey (+) استفاده کرد. Chocolatey نوعی چارچوب غیرمتمرکز برای نصب سریع برنامهها و ابزارها فراهم میکند. در ادامه مراحل نصب NPM آمده است.
در مرحله اول باید دستور زیر را در خط فرمان ویندوز وارد کرد.
@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 را نصب کرد:
npm install -g npm
برای اطمینان از نصب بودن نود جی اس و NPM نیز میتوان دستورات زیر را در خط فرمان ویندوز وارد کرد:
node -v
npm -v
خروجی این دستورات در صورتی که هر دو با موفقیت نصب شده باشند، به صورت زیر است:
حال با موفقیت نود جی اس و NPM روی سیستم نصب شدهاند.
پیکربندی محیط توسعه Node.js روی ویندوز 10 — از صفر تا صد
آموزش ساخت پروژه در نود جی اس Node JS
در این بخش از آموزش Node JS پس از نصب NPM و همچنین نصب نود جی اس، اولین پروژه فرضی این آموزش راهاندازی خواهد شد. در این پروژه سعی شده است با استفاده از نود جی اس، متنی دلخواه در مرورگر نمایش داده شود.
برای این کار به یک فایل جاوا اسکریپت نیاز است که در این آموزش مقدماتی نود جی اس، نام این فایل MyApp.js
خواهد بود. فایل نامبرده حاوی قطعه کد زیر است:
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
res.end('سلام. به این آموزش نود جی اس از تم آف خوش آمدید');
}).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.js، ابتدا باید آنها را با استفاده از مدیر بسته Node یا NPM نصب کنیم. برای مثال در این آموزش Node JS، ماژول Express با دستور زیر نصب شده است.
Npm install Express
فرایند نصب بدین صورت است:
دستور بالا فایلهای لازم را که حاوی «ماژولهای اکسپرس» هستند، دانلود و نصب میکند. حال بعد از اینکه ماژول نصب شد، برای استفاده از آن باید از کلمه کلیدی require
استفاده کرد. این کلمه کلیدی راهی برای گنجاندن عملکرد ماژول در آن برنامه کاربردی است که نود جی اس از آن استفاده میکند. مثال زیر برای درک این مفهوم مهم است:
var express=require('express');
var app=express();
app.set('view engine','jade');
app.get('/',function(req,res)
{
});
var server=app.listen(3000,function()
{
});
در قطعه کد بالا از کلمه کلیدی require
برای گنجاندن ماژولها و ایجاد اشیاء برای دسترسی به عملکرد آنها استفاده شده است. همچنین، مثال فوق از ماژول Express برای ساخت برنامههای کاربردی وب استفاده و موتور «View» را با استفاده از دستور set
تنظیم میکند و با استفاده از متد Listen
به پورتی خاص گوش میدهد. این مثال به طور خلاصه به مفهوم «موتورهای قالب» (Templating Engine) برای تزریق مقادیر در صفحات وب اشاره میکند.
آموزش ایجاد ماژول سفارشی در نود جی اس
برای ایجاد ماژولهای سفارشی با استفاده از Node.js، باید فرآیندی ساده را دنبال کرد که در این آموزش نود جی اس ارائه شده است. ابتدا باید فایلی جاوا اسکریپتی ساخته شود و کدی که حاوی منطق ماژول است را در آن وارد کرد. همچنین باید از کلمه کلیدی Export
استفاده کنیم تا این اطمینان به وجود آید که قابلیتهای تعریف شده در فایل به وسیله فایلهای دیگر قابل دسترسی است.
برای مثال در کد زیر تابعی مانند AddNumber
تعریف شده است که دو پارامتر را گرفته و آنها را با هم جمع میکند. این تابع باید به ماژول Export
اضافه شود تا آن را به تابعی عمومی تبدیل کند که به وسیله سایر ماژولهای برنامه قابل دسترسی باشد. در نهایت، برنامهای ایجاد میشود که ماژول سفارشی را فراخوانی کند. نام این فایل، Addition.js
است.
var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};
حال در این مرحله برای تکمیل ساخت ماژول نود جی اس فایلی به نام app.js
ساخته میشود که حاوی کد زیر است.
var Addition=require('./Addition.js');
console.log(Addition.AddNumber(1,2));
در کدهای بالا از کلمه کلیدی require
برای گنجاندن عملکرد در فایل Addition.js
استفاده شده است. از آنجایی که توابع موجود در فایل Addition.js
اکنون قابل دسترسی هستند، میتوان با تابع AddNumber
ارتباط برقرار کرد. در تابع، ٢ عدد بهعنوان پارامتر ارسال خواهند شد و با اجرای برنامه در کنسول، عدد ٣ نمایش داده خواهد شد و این یعنی تابع AddNumber
در فایل Addition.js
با موفقیت فراخوانی شده است.
گسترش ماژول در نود جی اس
در Node.js میتوان کتابخانهای را از ماژولهای رایج ایجاد کرد و در صورت نیاز، عملکرد آن ماژولها را گسترش داد. این کار با استفاده از تابع require
برای گنجاندن ماژول مورد گسترش، سپس ایجاد تابعی برای ماژول گسترش یافته و فراخوانی تابع از فایل برنامه اصلی انجام میشود.
هنگامی که ماژول گسترش یافته فراخوانی میشود، رشته را از ماژول اصلی فراخوانی کرده و خروجی مدنظر را باز میگرداند. در مثال زیر مراحل گسترش ماژول را در این آموزش Node JS بیان شده است.
مثال گسترش ماژول در نود جی اس
مرحله ١: در قدم اول ماژول پایه فرضی به نام Tutorial.js
ایجاد شده است. این فایل حاوی تابعی بوده که رشتهای را به کنسول برمیگرداند و قطعه کد آن به صورت زیر است:
var exports=module.exports={};
exports.tutorial=function()
{
console.log("Hi Faradars")
}
مرحله ٢: در این مرحله باید ماژولی گسترش یافته ایجاد شود که فایلی به نام NodeTutorial.js
است. این فایل از تابع require
برای گنجاندن ماژول Tutorial.js
و ایجاد تابعی استفاده میکند که رشتهای را به کنسول میفرستد. همچنین تابع را از ماژول Tutorial.js
برای خروجی رشته اصلی فراخوانی میکند. قطعه کد این فایل به صورت زیر است:
var Tutor=require('./Tutorial.js');
exports.NodeTutorial=function()
{
console.log("Node Tutorial")
function pTutor()
{
var PTutor=Tutor
PTutor.tutorial();
}
}
Or
var Tutor=require('./Tutorial.js');
exports.NodeTutorial=function()
{
console.log("Faradars Node Tutorial")
this.pTutor = function ()
{
var PTutor=Tutor
PTutor.tutorial();
}
}
مرحله ٣: در این مرحله باید فایل برنامه اصلی که فایلی به نام app.js
است ایجاد شود. این فایل ماژول NodeTutorial
و تابع داخل آن را فراخوانی خواهد کرد و موجب ایجاد خروجی میشود. قطعه کد آن به صورت زیر است:
var localTutor=require('./NodeTutorial.js');
localTutor.NodeTutorial();
localTutor.NodeTutorial.pTutor();
Or use this code
var tut = new localTutor.NodeTutorial(); // Create and save object
tut.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 با دستور زیر وارد شد:
npm login
با این کار، سایت اصلی NPM در مرورگر بازخواهد شد. اگر کاربر از قبل حساب کاربری داشته باشد، برای ورود باید رمز موقت را وارد کند و در غیر این صورت باید در سایت اصلی NPM حساب کاربری جدیدی بسازد. اگر ورود موفقیتآمیز باشد، نتیجه به صورت زیر خواهد بود:
حال باید بسته با ساخت فایلی به نام package.json
با دستور زیر راه اندازی شود:
npm init
با این کار چند سوال از کاربر در ترمینال ویندوز پرسیده خواهد شد که ترتیب این سوالها و نحوه پاسخ به آنها برای بسته آزمایشی ما به صورت تصویر زیر است:
حال نوبت به انتشار در گیتهاب فرا میرسد. این کار با اجرای دستورات زیر قابل انجام خواهد بود.
git add.
git commit -m "Initial release"
git tag v0.0.1
git push origin master --tags
در آخر هم باید بسته در گیتهاب منتشر شود که با دستور زیر این کار قابل انجام است.
npm 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
را ارسال میکند. قطعه کد زیر برای ساخت وب سرور مورد نظر استفاده شده است:
// Load the http module to create an http server.
var http = require('http');
// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hi Welcome To Faradars Mag n");
});
// Listen on port 7000, IP defaults to 127.0.0.1
server.listen(7000);
// Put a friendly message on the terminal
console.log("Server running at http://127.0.0.1:7000/");
// To run the server, open your terminal and run the command: node server.js
قطعه کد بالا باید در فایلی به نام server.js
ذخیره و با دستور زیر اجرا شود:
node server.js
در صورتی که اجرا موفقیتآمیز باشد، خروجی دستور به صورت زیر خواهد بود.
حال با بازکردن آدرس داده شده موجود در عکس بالا در مرورگر، خروجی به صورت زیر خواهد بود.
رسیدگی به درخواست های GET در Node.js
ایجاد درخواست «GET» در Node.js برای بازیابی دادهها از سایتی دیگر، نسبتاً ساده است که در این بخش از آموزش Node JS به آن پرداخته خواهد شد.
برای این کار ابتدا باید ماژول Request
را نصب کرد. این کار را میتوان با اجرای دستور زیر در خط فرمان انجام داد:
npm install request
هنگامی که ماژول درخواست نصب شد، خط فرمان پیامی را نشان میدهد که نام ماژول و نسخه نصب شده را به کاربر اطلاع میدهد. اکنون، میتوان از ماژول Request
برای ارسال درخواستهای GET به وبسایتهای دیگر و بازیابی اطلاعات آنها استفاده کرد که در زیر مثالی برای آن آورده شده است: فرض کنید قطعه کد مثال مربوط به ماژول Request
به صورت زیر باشد:
var request = require("request");
request("http://www.google.com",function(error,response,body)
{
console.log(body);
});
قطعه کد بالا نوعی درخواست GET به «www.google.com» ارسال میکند. ماژول Request
را میتوان برای ارسال درخواستهای GET به وبسایتها استفاده کرد. هنگامی که پاسخی دریافت میشود، پارامترها ( Error
، Response
و Body
) مقادیر متفاوتی خواهند داشت.
Error
شامل هر خطایی است که هنگام درخواست رخ داده است، در پاسخ هدرهای HTTP در پاسخ ارسال میشود و Body
شامل کل محتوای Response
خواهد بود. با نوشتن محتوای دریافتی در پارامتر Body
در فایل console.log
، کاربر میتواند هر محتوایی که از وبسایت دریافت کرده است را مشاهده کند. با اجرای دستور زیر میتوان قطعه کد بالا را اجرا کرد:
node 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» را آسان میکند. از طرف دیگر، اکسپرس جی اس مجموعهای قوی از ویژگیها را برای ساخت برنامههای کاربردی وب کارآمد فراهم خواهد کرد و در کنار آن با ارائه محیط توسعه ساده و شهودی، فرآیند توسعه را ساده میکند.
پیاده سازی احراز هویت در Node.js با Express و JWT — از صفر تا صد
آموزش نصب Express
برای استفاده از Express، باید از Node Package Manager برای دانلود و نصب ماژولهای مورد نیاز استفاده شود. این را میتوان با اجرای دستور NPM install express
در خط فرمان یا ترمینال ویندوز به صورت زیر انجام داد.
پس از نصب، میتوان برنامه Express ایجاد کرد که ما در این آموزش Node JS ، مثالی فرضی را در نظر گرفتهایم. برای این هدف، باید ماژول سروری ایجاد شود که به شماره پورت 3000
گوش میدهد. اگر درخواستی از طریق مرورگر در این شماره پورت انجام شود، برنامه سرور با پیام مدنظر به کلاینت پاسخ میدهد. در اینجا مثالی از نحوه ایجاد این برنامه با استفاده از Express آورده شده است.
var express=require('express');
var app=express();
app.get('/',function(req,res)
{
res.send('Hello, welcome to this Node.js tutorial from Faradars');
});
var server=app.listen(3000,function() {});
حال با دستور زیر میتوان برنامه را اجرا کرد.
node expresstet
خروجی دستور بالا در مرورگر به صورت تصویر زیر خواهد بود:
کد فوق از ماژول Express برای ایجاد سروری استفاده میکند که به درخواستهای پورت 3000
با پیام مدنظر ما پاسخ میدهد. کد بالا این کار را با گنجاندن ماژول Express با استفاده از تابع require
، ایجاد برنامه Express با تابع express()
، ایجاد یک کنترل کننده مسیر برای URL ریشه با استفاده از تابع app.get()
و راهاندازی سرور با listen()
انجام میدهد.
Routes چیست؟
«مسیرها» (Routes) تعیین میکنند که چگونه برنامه کاربردی به درخواست مشتری به یک نقطه پایانی خاص پاسخ میدهد. «سینتکس» (Syntax) آن به صورت زیر است:
app.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
را به نمایش درخواهد آورد.
قطعه کد مثال فوق به صورت زیر است:
var express = require('express');
var app = express();
// Add route for '/'
app.get('/', function(req, res) {
res.send('Welcome to Faradars Mag');
});
// Add route for '/Node'
app.get('/Node', function(req, res) {
res.send('Faradars Node.js Tutorial');
});
// Add route for '/Angular'
app.get('/Angular', function(req, res) {
res.send('Faradars Angular Tutorial');
});
// Start server
app.listen(3000, function() {
console.log('Server is listening on port 3000');
});
اجرای کدهای بالا با دستور زیر صورت میگیرد.
node server.js
برنامه فوق در فایلی به نام server.js
ذخیره شده که خروجی آن به شرح موارد زیر است:
١- خروجی مسیر پیشفرض در پورت 3000
به صورت زیر خواهد بود:
خروجی مسیر /Node
به صورت زیر خواهد بود:
خروجی مسیر /Angular
به صورت زیر خواهد بود:
ساخت وب سرور با اکسپرس
«Node.js Express» میتواند برای ایجاد وب سرور با مسیریابی سریع و آسان استفاده شود. برای این کار به «Jade» نیاز است که آن را میتوان از طریق Node Package Manager با دستور زیر نصب و برای قالببندی استفاده کرد.
npm install jade
در زیر، قطعه کد وب سروری ساده آورده شده که با اکسپرس ساخته شده است:
var express=require('express');
var app=express();
app.set('view engine','jade');
app.get('/',function(req,res)
{
res.render('index',
{title:'Faradars',message:'Welcome To Faradars Mag'})
});
var server=app.listen(3000,function() {});
اولین قدم در راهاندازی برنامه، مشخص کردن موتور نمایشی است که برای رندر کردن قالبها استفاده میشود. در مثال فوق از «Jade» به عنوان موتور نمایش استفاده شده است. سپس از تابع render
برای رندر قالب به نام index.jade
استفاده شده و مقادیر رشتهای Faradars
و Welcome To Faradars Mag
به ترتیب به پارامترهای title
و message
منتقل شدهاند. هنگامی که دستور به درستی اجرا شود، خروجی در مرورگر نشان داده میشود و به ترتیب مقادیر Faradars
و Welcome To Faradars Mag
را در عنوان و پیام درج میکند.
قطعه کد بالا در فایلی به نام webserver.js
ذخیره شده است و با دستور زیر در ترمینال ویندوز اجرا خواهد شد:
node 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
موجود باشد.
Documents
{
{Employeeid : 1, Employee Name : Guru99},
{Employeeid : 2, Employee Name : Joe},
{Employeeid : 3, Employee Name : Martin},
}
١- نصب ماژولهای NPM: ابتدا باید با دستور زیر MongoDB را نصب کرد:
npm install mongodb
٢- ایجاد و بستن اتصال به پایگاه داده: حال نوبت به ایجاد و بستن اتصال به پایگاه داده MongoDB خواهد رسید که با قطعه کد زیر این کار انجام میشود.
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
console.log(Connected);
db.close();
});
کدهای فوق مربوط به نحوه اتصال به پایگاه داده MongoDB با استفاده از ماژول Mongoose میشوند. اولین مرحله شامل اضافه کردن ماژول و سپس مشخص کردن رشته اتصال به پایگاه داده خواهد بود. در صورت موفقیت آمیز بودن اتصال، رشته در کنسول نوشته خواهد شد و اتصال بسته میشود.
٣- پرس و جو برای دادهها در پایگاه داده MongoDB: با استفاده از درایور MongoDB، میتوان پایگاه داده EmployeeDB
را برای اطلاعات موجود در مجموعه Employee
جستجو کرد. این مجموعه شامل تمام اسناد مربوط به کارمندان است که هر کدام دارای شناسه شی، نام کارمند و شناسه کارمند هستند. برای واکشی تمام اسناد موجود در مجموعه کارمند، میتوان از درایور MongoDB برای اجرای پرسوجو استفاده کرد. قطعه کد انجام این کار به صورت زیر خواهد بود:
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
var cursor = db.collection('Employee').find();
cursor.each(function(err, doc) {
console.log(doc);
});
});
در کد بالا، متُد MongoClient.connect
برای اتصال به پایگاه داده MongoDB استفاده میشود. همچنین نوعی cursor
در کدهای بالا ایجاد میشود که به رکوردهای مجموعه Employee
اشاره میکند. سپس از cursor
برای تکرار در رکوردهای مختلف در پایگاه داده استفاده خواهد شد و تابعی اجرا میشود که محتویات هر سند را در کنسول چاپ میکند. همچنین میتوان با تعیین شرایط جستجو در تابع find()
رکوردی خاص را از پایگاه داده دریافت کرد.
۴- درج اسناد در مجموعه: کتابخانه MongoDB متد insertOne
را برای درج اسناد در مجموعه فراهم میکند. مثال زیر نحوه استفاده از متد insertOne
را برای درج سند در مجموعه Employee
نشان میدهد. جزئیات سند در کد مشخص شده است. برای بررسی اینکه دادهها با موفقیت درج شدهاند، میتوان دستورات Use EmployeeDB
و db.Employee.find({Employeeid :4 })
را در MongoDB اجرا کرد.
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
db.collection('Employee').insertOne({
Employeeid: 4,
EmployeeName: "NewEmployee"
});
});
۵- بهروزرسانی اسناد در مجموعه: اسناد را میتوان را در مجموعه با استفاده از متد updateOne
ارائه شده توسط کتابخانه MongoDB بهروز کرد. قطعه کد زیر نحوه بهروزرسانی یک سند در مجموعه mongoDB
را نشان میدهد.
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
db.collection('Employee').updateOne({
"EmployeeName": "NewEmployee"
}, {
$set: {
"EmployeeName": "Mohan"
}
});
});
۶- حذف اسناد در مجموعه: اسناد را میتوان در مجموعه با استفاده از متد deleteOne
ارائه شده به وسیله کتابخانه MongoDB حذف کرد. قطعه کد زیر نحوه حذف سند در مجموعه mongoDB
را نشان میدهد.
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url, function(err, db) {
db.collection('Employee').deleteOne(
{
"EmployeeName": "Mohan"
}
);
});
آموزش وعده ها در Node JS
«وعدهها» (Promises) پیشرفتی برای «توابع پاسخ به تماس» (Callback Functions) در Node.js هستند. آنها به کاهش مشکلات مرتبط با تودرتو کردن چندین تابع پاسخ به تماس در طول چرخه عمر توسعه کمک میکنند.
سینتکس اولیه وعده با فراخوانی « doSomethingAync
» یا تابع ناهمزمان و عبارت « then
» تعریف میشود که مقدار « onFulfilled
» را برای عملیات موفق و مقدار « onRejected
» را برای خطا مشخص میکند.
var promise = doSomethingAync()
promise.then(onFulfilled, onRejected)
پاسخ به وعده ها
در این بخش از آموزش Node JS، مثالی از کاربرد وعدهها در نود جی اس بررسی خواهد شد. برای این هدف ابتدا باید با دستور زیر ماژول وعدهها را نصب کرد:
npm install promise
حال نوبت به ایجاد کدی است که از وعدهها در نود جی اس استفاده کند که کد زیر مربوط به این هدف است.
var Promise = require('promise');
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url)
.then(function(err, db) {
db.collection('Employee').updateOne({
"EmployeeName": "Martin"
}, {
$set: {
"EmployeeName": "Mohan"
}
});
});
در قطعه کد بالا، متُد MongoClient.connect
برای ایجاد اتصال به پایگاه داده MongoDB استفاده میشود و سپس از تابع then
برای اجرای قطعه کد استفاده خواهد شد که EmployeeName
کارمند را با نام Martin
به Martin
بهروز میکند.
وعده های تودرتو در نود جی اس
برخورد با وعدههای تودرتو در نود جی اس از مباحث بسیار مهمی است که در این بخش از آموزش Node JS در قالب مثالی ساده به آن پرداخته خواهد شد. قطعه کد مثال مربوط به این بخش به صورت زیر است:
var Promise = require('promise');
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
MongoClient.connect(url)
.then(function(db) {
db.collection('Employee').insertOne({
Employeeid: 4,
EmployeeName: "NewEmployee"
})
.then(function(db1) {
db1.collection('Employee').insertOne({
Employeeid: 5,
EmployeeName: "NewEmployee1"
})
})
});
در کد فوق از ۲ عبارت then
برای درج رکوردها در پایگاه داده MongoDB استفاده شده است. در بند اول، از پارامتر db
برای دسترسی به مجموعه و از متد insertOne
برای درج سند در مجموعه Employee
استفاده شده است. عبارت then
در مثال بالا برای درج رکورد دوم استفاده میشود. در نهایت و پس از اجرای کدها، ۲ رکورد به پایگاه داده MongoDB اضافه خواهند شد.
ساخت وب اپلیکیشن RESTful با استفاده از Express ،Node.js و MongoDB – از صفر تا صد
ساخت وعده سفارشی در نود جی اس
برای ایجاد وعده سفارشی، کتابخانه «q» باید نصب و استفاده شود که این کار با دستور زیر در ترمینال قابل انجام است:
npm install q
اگر نصب موفقیت آمیز باشد به صورت زیر خواهد بود:
در ادامه مثالی برای ساخت وعده سفارشی آورده شده است:
var Q = require('q');
function Add() {
var a, b, c;
a = 5;
b = 6;
c = a + b;
return Q.resolve(c);
}
var Display_promise = Q.denodeify(Add);
Display_promise()
.then(function(result) {
console.log('Addition function completed: ' + result);
});
در کد بالا، کتابخانه 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 خواهد بود که با دستور زیر قابل انجام است:
npm install bluebird
ساخت وعده با این کتابخانه در قالب مثالی کاربردی بررسی خواهد شد که قطعه کد مثال مورد نظر ما به صورت زیر است:
var Promise = require('bluebird');
var mongoClient = Promise.promisifyAll(require('mongodb')).MongoClient;
var url = 'mongodb://localhost/EmployeeDB';
mongoClient.connectAsync('mongodb://localhost/EmployeeDB')
.then(function(db) {
return db.collection('Employee').findAsync({})
})
.then(function(cursor) {
cursor.each(function(err, doc) {
console.log(doc);
})
});
مرحله بعدی این خواهد بود که ماژول bluebird
به کدها اضافه و از آن برای وعده دادن به ماژول MongoDB استفاده شود که در کدهای بالا این عمل قابل مشاهده است. وعده دادن به کتابخانه یعنی این که هر متدی که در آن وجود دارد نوعی وعده را برمیگرداند که این کار میتواند به وسیله bluebird
مدیریت شود.
همچنین دستور require
برای گنجاندن کتابخانه Bluebird و متد promisifyAll()
برای ایجاد نسخهای غیر همگام از هر متد در ماژول MongoDB استفاده میشود و برای هر فراخوانی متد وعدهای را برمیگرداند.
مرحله آخر اتصال به پایگاه داده، بازیابی تمام رکوردهای مجموعه و نمایش آنها در کنسول است که خروجی آن به صورت تصویر زیر خواهد بود:
مولد در نود جی اس چیست؟
«ژنراتورها» (مولدها | Generators) عملکردهای خاصی هستند که میتوانند در هر نقطهای متوقف و از سر گرفته شوند. آنها در نود جی اس برای «اجرا با تأخیر» (Lazy Load) استفاده میشوند، به این معنی که مقادیر فقط در صورت نیاز از ژنراتور گرفته میشوند. ژنراتورها دو متد اصلی زیر را دارند:
- «Next»
- «Yield»
متد Yield
در تابعی برای توقف اجرا در خطی خاص فراخوانی میشود و متد Next
از برنامه اصلی برای از سرگیری اجرای تابعی فراخوانی خواهد شد که دارای متد Yield
است. اجرای برنامه تا متد Yield
بعدی یا فراخوانی آخرین متد ادامه خواهد داشت.
Node.js و ابزارها و تکنیکها برای ساخت سرورهای قدرتمند و سریع
مثالی از ژنراتور در نود جی اس
در زیر مثالی از ژنراتور برای درک بهتر آورده شده است:
function* Add(x) {
yield x + 1;
var y = yield(null);
y = 6
return x + y;
}
var gen = Add(5);
gen.next();
gen.next();
در تابع مولد Add()
قطعه کد بالا از کلمه کلیدی Yield
برای توقف عملکرد استفاده شده است. هنگامی که تابع با مقدار 5 فراخوانی میشود، این مقدار به پارامتر x نسبت داده خواهد شد. سپس تابع next()
فراخوانی میشود که اجرای تابع Add()
را از سر میگیرد. بعد از آن عبارت اجرای تابع را مجدداً متوقف میکند و تابع next()
دوباره فراخوانی میشود. این کار اجرا را از سر میگیرد و مقدار x=5
و y=6
باهم جمع شده و نتیجه برگردانده میشود.
پاسخ به تماس در مقابل ژنراتورها
از ژنراتورها برای حل مشکل «جهنم کالبک» (callback hell) استفاده میشود، یعنی زمانی که توابع Callback در طول توسعه یک برنامه Node.js بیش از حد تودرتو میشوند. ژنراتورها میتوانند در ایجاد توابع تایمر مفید باشند که در ادامه مثالی برای درک بهتر آن آورده شده است. مثال زیر این تابع را با تأخیرهای ۱۰۰۰، ۲ هزار و ۳ هزار میلیثانیه فراخوانی میکند. گام نخست تعریف تابع تماس با اعمال تاخیر زمانی لازم است و قطعه کد آن در ادامه ملاحظه میشود.
function Timedelay(ptime, callback) {
setTimeout(function() {
callback("Pausing for " + ptime);
}, time);
}
در قطعه کد بالا، تابعی به نام Timedelay
ایجاد شده است که دو پارامتر دارد: ptime
برای زمان تأخیر برحسب میلیثانیه و callback
برای تابعی که باید پس از تأخیر اجرا شود. همچنین پیامی در داخل تابع برای نشان دادن زمان تأخیر ایجاد شده و از تابع setTimeout
برای به تأخیر انداختن اجرای فراخوان استفاده شده است. پس از سپری شدن تأخیر، callback
با پیام داخل خودش به عنوان پارامتر آن اجرا میشود. تابع Timedelay
اساساً تأخیر را معرفی کرده و پس از پایان تأخیر، تابع callback
را اجرا میکند.
در مرحله ٢، نوبت به استفاده از callbacks
میرسد. کد زیر نشان میدهد که چگونه میتوان تماسهای برگشتی را برای تأخیرهای 1000
، 2000
و 3000
میلیثانیه پیادهسازی کرد. برای این هدف از تابع setTimeout
برای به تأخیر انداختن اجرای هر تابع callback
بر اساس زمان تأخیر مشخص شده، استفاده شده است. با اضافه کردن توابع callback
، میتوان مطمئن شد که هر تابع فقط پس از سپری شدن تأخیر اجرا میشود، که این شرایط میتواند برای «برنامه نویسی ناهمگام» (Asynchronous Programming) در جاوا اسکریپت مفید باشد.
Timedelay(1000, function(message) {
console.log(msg);
Timedelay(2000, function(message) {
console.log(msg);
Timedelay(3000, function(message) {
console.log(msg);
})
})
}
کدهای فوق اجرای تابعهای callbacks
را بر اساس بازههای زمانی مختلف نشان میدهد. تابع Timedelay
چندین بار با مقادیر تأخیر مختلف با استفاده از callbacks
فراخوانی میشود. با این حال، با افزایش تعداد تماسها، مدیریت کد پیچیدهتر و سختتر خواهد شد. گام سوم پیاده سازی کدهای بالا این بار با استفاده از ژنراتورها یا مولدها است که این کار به صورت زیر قابل انجام خواهد بود:
function* Messages() {
console,log(yield(Timedelay(1000, function(){})));
console,log(yield(Timedelay(2000, function(){})));
console,log(yield(Timedelay(3000, function(){})));
}
کد فوق نحوه پیادهسازی تابع Timedelay
را با استفاده از ژنراتورها نشان میدهد. در کدهای بالا نوعی تابع مولد به نام Messages
تعریف شده و برای فراخوانی تابع Timedelay
استفاده میشود. تابع Yield
برای فراخوانی Timedelay
با زمانهای تأخیر متفاوت استفاده میشود که درک کدها را در مقایسه با رویکرد برگشتی سادهتر میکند. به طور کلی، کدهای فوق نشان میدهد که چگونه ژنراتورها میتوانند برنامه نویسی ناهمزمان را در Node.js ساده کنند.
نصب سرویس Node.js روی وب سرور | راهنمای جامع
آموزش جریان فایل در Node.js
در Node.js، جریان یا استریم دادهها به طور گستردهای برای انتقال داده یا اطلاعات استفاده میشوند. به عنوان مثال، هنگام استفاده از تابع console.log
برای خروجی دادهها به کنسول، نوعی جریان استفاده میشود.
علاوه بر این، Node.js اجازه میدهد تا دادهها از فایلها استریم شوند، که این امر خواندن و نوشتن آنها را آسانتر میکند. به منظور نشان دادن نحوه استفاده از استریم در نود جی اس برای خواندن و نوشتن از فایلها در این آموزش Node JS مثالی در ادامه مورد بررسی قرار گرفته است.
مثالی از جریان فایل در نود جی اس
برای ارائه مثالی کاربردی لازم است که در ابتدا فایلی به نام data.txt
یا هر نام دلخواه دیگری را در حافظه محلی کامپیوتر ذخیره کنیم. فایل متنی فرضی ما برای این کار حاوی دو جمله متنی زیر است:
حال نوبت به نوشتن کدهای استریم برای خواندن فایل است، که قطعه کد آن به صورت زیر خواهد بود:
var fs = require("fs");
var stream;
stream = fs.createReadStream("D://node-stream/data.txt");
stream.on("data", function(data) {
var chunk = data.toString();
console.log(chunk);
});
در کدهای بالا، ماژول fs
برای ایجاد جریان استفاده شده است. همچنین از متد createReadStream
برای ایجاد استریم قابلخواندن استفاده و مسیر فایل data.txt
به آن داده شده است. در کد فوق تابع stream.on
نوعی کنترل کننده رویداد محسوب میشود که وقتی دادهها از فایل خوانده میشوند، نوعی تابع فراخوانی را اجرا میکند.
همچنین تابع callback
دادهها را به رشته تبدیل کرده و به کنسول ارسال میکند. هر تکه داده از جریان خوانده شده و به رشته تبدیل خواهد شد و سپس به عنوان خروجی به کنسول ارسال میشود. حال با دستور زیر برنامه نوشته شده قابل اجرا خواهد بود.
node index.js
خروجی دستور بالا به صورت تصویر زیر است:
نوشتن در فایل
این بخش از آموزش Node JS مربوط به قابلیت نوشتن در فایل است که این عمل روی مثال فرضی بالا قرار است انجام شود. قطعه کد لازم برای انجام این کار به منظور نوشتن در فایل به صورت زیر است.
var fs = require("fs");
var stream;
stream = fs.createWriteStream("D://data.txt");
stream.write("مجله تم آف")
stream.write("آموزش نو د جی اس")
stream.write("آموزش جاوا اسکریپت")
stream.write("آموزش برنامه نویسی")
stream.write("آموزش رایگان برنامه نویسی ")
stream.write("آموزش فریمورک های جاوا اسکریپت ")
کد بالا نشان میدهد که استریم قابل نوشتن را میتوان با متد fs.createWriteStream
ایجاد کرد و مکان فایل داده مدنظر را به عنوان ورودی ارائه کرد. سپس میتوان از متد stream.write
برای نوشتن داده در فایل استفاده کرد که در فایل داده ذخیره میشود. با باز کردن فایل data
، دادههایی که روی آن نوشته شده است، نمایش داده میشود. خروجی قطعه کد بالا به صورت زیر خواهد بود:
Pipe در نود جی اس
استفاده از «لوله» (Pipe) در برنامه Node راهی عالی برای انتقال مؤثر دادهها از یک فایل به فایل دیگر است. برای انجام این کار، میتوانی از متد pipe()
استفاده کرد که دو آرگومان میگیرد: جریانی قابل نوشتن که به عنوان مقصد داده عمل میکند و شی اختیاری. برای درک بهتر استفاده از Pipe در ادامه این بخش از آموزش Node JS، مثالی فرضی ارائه شده است.
در گام اول فرض بر این است که فایلی متنی به نام datainput.txt
در «دارایو D» کامپیوتر ما ذخیره شده که حاوی دادههای زیر است:
حال در این مرحله فایلی خالی به نام dataOutput.txt
ایجاد و در همان درایو D ذخیره خواهد شد.
حال با قطعه کد زیر انتقال داده از فایل datainput.txt
به فایل dataOutput.txt
انجام خواهد شد.
var fs = require("fs");
var readStream = fs.createReadStream("D://datainput.txt");
var writeStream = fs.createWriteStream("D://dataOutput.txt");
readStream.pipe(writeStream);
کد بالا انجام انتقال دادهها از فایلی به فایل دیگر را با استفاده از Readstream
و Writstream
انجام میدهد. Readstream
برای فایلی که حاوی دادههایی است که باید منتقل شوند و Writstream
برای فایل خالی که مقصد دادهها است ایجاد میشود. سپس دستور pipe برای انتقال دادهها از Readstream
به Writstream
استفاده میشود. که با اجرای دستور زیر این کار انجام خواهد شد.
node index.js
خروجی دستور بالا به صورت زیر خواهد بود:
آموزش رویدادها در Node JS
Node.js نوعی چارچوب رویداد محور است که حول مفهوم رویدادها میچرخد. رویدادها در جاوا اسکریپت و نود جی اس اَعمال یا اتفاقهایی هستند که در سیستم رخ میدهند، مانند کلیک کردن کاربر روی دکمهای در صفحه وب یا برقراری ارتباط با پایگاه داده و بسیاری از موارد دیگر را هم میتوان نام برد. برنامه نویسی مبتنی بر رویداد برای ایجاد توابعی استفاده میشود که هنگام وقوع رویدادهای خاص فعال میشوند. برای درک بهتر رویدادها، طبق روال عادی این آموزش Node JS با مثالی عملی به دنبال این مفهوم خواهیم رفت.
با استفاده از ماژول events
میتوان رویدادها را در Node.js ایجاد کرد. برای نشان دادن این موضوع در مثال زیر رویدادی به نام data received
ایجاد شده است. هنگامی که این رویداد فعال شود، متن data received
به کنسول ارسال میشود.
var events = require('events');
var eventEmitter = new events.EventEmitter();
eventEmitter.on('data_received', function() {
console.log('data received succesfully.');
});
eventEmitter.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 است که با دستور زیر امکانپذیر خواهد بود.
npm install jasmine-node
٢- راهاندازی محیط Jasmine: برای شروع کار با Jasmine، دستور مقداردهی اولیه محیط باید اجرا شود. این دستور یک دایرکتوری مشخصات و نوعی فایل پیکربندی «جیسون» (JSON) ایجاد میکند. در محیط Jasmine دایرکتوری spec
برای ذخیره تمام فایلهای آزمایشی استفاده میشود، در حالی که فایل JSON اطلاعات پیکربندی را ذخیره میکند. دستور مقداردهی اولیه به صورت زیر است:
npx jasmine init
یا
jasmine init
٣- بازبینی و بررسی فایل پیکربندی: فایل پیکربندی Jasmine معمولاً در پوشه spec/support
با نام jasmine.json
ذخیره میشود. این فایل تمام فایلهای منبع و فایلهای مشخصاتی را فهرست میکند که باید در Jasmine runner
گنجانده شوند. تصویر زیر نمونهای از ظاهر فایل jasmine.json
را نشان میدهد:
آزمایش برنامه نود جی اس با Jasmine
در این بخش از آموزش Node JS برای درک فرآیند آزمایش برنامه Nodejs با Jasmine مثالی عملی ارائه خواهد شد. در مثال فرضیِ پیشرو، ماژولی تعریف شده است که ۲ عدد را باهم جمع میکند که باید نتیجه درستیِ حاصل از آن آزمایش شود. سپس کدی جداگانه برای تست آن تعریف شده است و در نهایت از jasmine برای تست تابع جمع کننده دو عدد استفاده خواهد شد.
١- نوشتن قطعه کد برنامه: قطعه کد برنامه به صورت زیر است.
var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};
در قطعه کد بالا کلمه کلیدی EXPORT
به کاربر امکان میدهد تا عملکرد تعریف شده در فایل را برای فایلهای دیگر در دسترس قرار دهد. همچنین تابعی به نام AddNumber
تعریف شده است که دو پارامتر a
و b
را میگیرد و مجموع آنها را برمیگرداند. سپس این تابع به ماژول EXPORT
اضافه میشود تا آن را عمومی و در دسترس سایر ماژولهای برنامه قرار دهد.
٢- نوشتن قطعه کد آزمایش برنامه: قطعه کد آزمایش برنامه با Jasmine به صورت زیر است.
var app=require("C:UsersOrasDesktopFaradars-jasmineAdd.js");
describe("Addition",function(){
it("The function should add 2 numbers",function() {
var value=app.AddNumber(5,6);
expect(value).toBe(11);
});
});
در قطعه کد بالا ماژول آزمایشی برای تابع AddNumber
در فایل App.js
با دادن نام و توضیحات تست با استفاده از متدهای describe()
و it()
آغاز میشود. سپس متد AddNumber
با دو پارامتر 5
و 6
فراخوانی شده و مقدار بازگشتی در متغیری به نام value
ذخیره خواهد شد. در نهایت، مقایسه یا آزمایش با استفاده از متد expect()
انجام میشود تا اطمینان حاصل شود که مقدار بازگشتی برابر با مقدار مورد انتظار 11
است. با دستور زیر میتوان آزمایش برنامه را شروع کرد:
jasmine App.js
خروجی دستور بالا به صورت تصویر زیر خواهد بود که این نشان میدهد که آزمایش با موفقیت انجام شده است:
سخن پایانی
نود جی اس یکی از اصلیترین فناوریهای توسعه وب در سمت سرور به حساب میآید که امروزه از آن استفاده میکنند. توسعه وب در سمت سرور با این فناوری نسبت به قبل بسیار پیشرفت کرده و آسانتر شده است. در این مطلب از «مجله تم آف» سعی بر این بود که آموزش Node JS به صورت پروژه محور و با بیانی ساده ارائه شود.
در مطلب فوق از نحوه نصب نود جی اس گرفته تا نحوه کار با پایگاه دادههای مونگو دی بی در نود جی اس، کار با فایلها در نود جی اس، ساخت وب سرورها با نود جی اس، رویدادها در نود جی اس، کار با فریمورکهای محبوب نود جی اس و بسیاری از موارد دیگر توضیحاتی ارائه شد اما با این حال برای درک بهتر و عمیق شدن در نود جی اس توصیه میتوان از آموزشهای نود جی اس تم آف استفاده کرد.