در این مقاله به صورت پروژه محور با آموزش Node.js با بررسی معماری ابتدایی، ماژولهای مختلف و پیادهسازی پروژه محور Node.js و Express.js در خدمت شما هستیم.
اگر تا به حال اسم Node.js را شنیده باشید، پس احتمالا میدانید که یکی از معروفترین و قدرتمندترین فریمورکهای JavaScript است. Node.js از زمان انتشار، حضور قدرتمندی در بازار IT داشته و حتی با معرفی فریمورکهای جدید و پویای JS مانند Angular، React، Meteor به نظر نمیرسد که چیزی از محبوبیت Node.js کم شده باشد.
فکر میکنید چرا؟
به کمک این آموزش Node.js ، تصویری جامع از آن برای شما ارائه خواهم کرد. بنابراین آماده شوید تا شما هم به جمع طرفداران Node.js اضافه شوید.
در این مقاله به صورت پروژه محور با آموزش Node.js با بررسی معماری ابتدایی، ماژولهای مختلف و پیادهسازی پروژه محور Node.js و Express.js در خدمت شما هستیم.
اگر تا به حال اسم Node.js را شنیده باشید، پس احتمالا میدانید که یکی از معروفترین و قدرتمندترین فریمورکهای JavaScript است. Node.js از زمان انتشار، حضور قدرتمندی در بازار IT داشته و حتی با معرفی فریمورکهای جدید و پویای JS مانند Angular، React، Meteor به نظر نمیرسد که چیزی از محبوبیت Node.js کم شده باشد.
فکر میکنید چرا؟
به کمک این آموزش Node.js ، تصویری جامع از آن برای شما ارائه خواهم کرد. بنابراین آماده شوید تا شما هم به جمع طرفداران Node.js اضافه شوید.
فهرست محتوای این مقاله
برنامه نویسی Node.js چیست؟
Node.js فریمورکی است که بر پایهی موتور جاواسکریپت V8 گوگل کروم توسعه یافته است و مستقیما جاواسکریپت را در کد اختصاصی ماشین کامپایل میکند. Node.js فریمورکی کمحجم است که برای ایجاد وب اپلیکیشنهای سمت سرور استفاده میشود و API جاواسکریپت را برای ارائهی قابلیتهای سمت سروری معمول توسعه میدهد.
از Node.js معمولا برای توسعهی اپلیکیشنهای با مقیاس بزرگ، به خصوص سایتهای جریان ویدئویی(video streaming sites)، اپلیکیشنهای تک صفحهای (single-page applications) و دیگر اپلیکیشنهای وب استفاده میشود. Node.js از یک مدل I/O رویداد محور و مسدود نشونده (non-blocking) استفاده میکند و همین امر باعث میشود برای اجرای برنامههای مبتنی بر داده و بلادرنگ (Real-Time) بسیار مناسب باشد.
Node.js نیز مانند هر زبان برنامهنویسی دیگری از پکیجها و ماژولهایی استفاده میکند. آنها کتابخانههایی هستند که حاوی توابع مختلف هستند و از طریق npm یا مدیریت پکیج node package manager وارد کدها میشوند و در برنامهها به کار میروند. برخی از ویژگیهای مهم که Node.js را تعریف میکنند عبارتند از:
ویژگی های Node.js:
1. متن باز بودن open-source
Node.js یک فریمورک تحت لایسنس MIT و متنباز است که توسط انجمنی بسیار وسیع پشتیبانی میشود. این انجمن کاملا فعال است که برای افزودن توانمندیهای جدید به اپلیکیشنهای Node.js مشارکت دارند.
2. ساده و آسان بودن
از آنجایی که Node.js بر پایهی موتور جاواسکریپت V8 گوگل کروم ساخته شده، کتابخانهی آن قابلیت اجرای سریع کدها را داراست.
3. ناهمزمانی (Asynchronous)
تمام کتابخانههای Node.js ناهمزمان هستند، بدین معنا که سرورهای مبتنی بر Node.js برای فرستادن پاسخ و حرکت به سمت API بعدی هرگز منتظر یک API نمیمانند.
4. مقیاسپذیری بالا
مکانیزم رویداد باعث میشود که Node.js بسیار مقیاسپذیر باشد و سرور به صورت مسدود نشونده پاسخها را ارسال کند.
5. تک موضوعی بودن Single-Treaded
Node.js از حلقه رویددادها استفاده میکند که باعث میشود تا مدلهای تک موضوعی را دنبال کند. این امر امکان مدیریت چندین درخواست توسط یک برنامه را فراهم میکند.
6. عدم وجود بافرینگ
یکی از قابلیتهای اصلی Node.js این است که هیچ دادهای را بافر نمیکند.
7. چندسکویی بودن Cross-Platform
Node.js میتواند به آسانی ایجاد شده و بر روی پلتفرمهای مختلفی مانند ویندوز، مکنتاش و لینوکس پیادهسازی شود.
اکنون اجازه دهید پیش رفته و ببینیم چگونه یک کد واقعی بر روی مرورگر اجرایی میشود. اما پیش از آن، باید Node.js را دانلود و بر روی کامپیوتر خود نصب کنید.
پس اکنون خودآموز Node.js را ادامه داده و دربارهی مهمترین اجزاء Node.js یعنی npm توضیحاتی میدهیم.
NPM (مدیریت پکیج Node)
NPM مخخف عبارت Node Package Manager است و همانطور که از نامش پیداست مدیریت پکیجی برای پکیجها و ماژولهای Node.js است. از ورژن ۰.۶.۰ به بعد، npm به صورت پیشفرض به نصب node اضافه شده است. این کار شما را از دردسرهای نصب npm به صورت مجزا نجات میدهد.
به طور کلی، NPM به دو روش مفید واقع میشود:
1. انبارههای آنلاینی را برای پکیجها و ماژولهای Node.js فراهم و از آنها پشتیبانی میکند که میتوانند به آسانی دانلود شده و در پروژهها استفاده شوند. میتوانید آنها را در npmjs.com پیدا کنید.
2. برنامهی کمکی خط فرمان (Command line) را به منظور نصب پکیجهای مختلف Node.js، مدیریت ورژنهای Node.js و ارتباط بین پکیجها فراهم میآورد.
اما اکنون، حتما این سوال برایتان پیش آمده است که این ماژولها دقیقا چه هستند و چگونه به ما در ساخت اپلیکیشنهای Node.js کمک میکنند. در بخش بعدی این خودآموز، اطلاعات کاملی دربارهی ماژولهای Node.js ارائه خواهم کرد.
ماژولهای Node.js
در Node.js، ماژول عبارت است از عملکردهای مختلفی که در فایلهای JS دستهبندی شدهاند. این ماژولها بافت و شرایط منحصر به فردی دارند، بنابراین وارد حوزهی دیگر انواع ماژولها نمیشوند و در آنها دخالتی ندارند.
این ماژولها استفادهی مجدد از کدها را ممکن میسازند و سهولت کاربرد را افزایش میدهند. Node.js اصولا سه نوع ماژول را در اختیار ما قرار میدهد:
1. ماژولهای هستهای (Core Modules)
2. ماژولهای محلی (Local Module)
3. ماژولهای طرف سوم (Third-Party Module)
ماژولهای هستهای
از آنجا که Node.js فریمورکی کاملا کمحجم است، ماژولهای هستهای حداقل عملکردها را در خود جای میدهند. این ماژولها اغلب زمانی که Node شروع به اجرا میکند لود میشوند. تمام کاری که باید انجام دهید این است که این ماژولهای هستهای را برای استفاده در کدهای خود وارد کنید.
در جدول زیر چند ماژول هستهای پراهمیت آورده شده است.
ماژول هستهای | توضیحات |
http | شامل کلاسها، متدها و رویدادهایی است که نیازمند ایجاد سرورHTTP در Node.js هستند |
url | شامل متدهایی برای تفکیکپذیری URL و تجزیه در Node |
querystring | شامل متدهایی برای کار با رشتهی جستجو (query string) در Node |
path | شامل متدهایی برای کار با مسیرهای فایل |
fs | شامل کلاسها، متدها و رویدادهایی برای کار با I/O فایل |
util | شامل توابع کمکی که میتوانند برای برنامهنویسان سودمند باشند |
میتوانید با استفاده از کد زیر، ماژول هستهای خود را لود کنید:
- var module = require('module_name');
اکنون بیایید ببینیم ماژولهای محلی چه هستند.
ماژولهای محلی Node.JS
ماژولهای محلی Node.js، ماژولهایی سفارشی هستند که توسط کاربر یا توسعهدهنده به صورت محلی در اپلیکیشن ایجاد میشوند. این ماژولها عملکردهای متنوعی را در بر میگیرند که در فایلها و فولدرهای مجزا دستهبندی شدهاند. این فایلها و فولدرها میتوانند به آسانی با استفاده از NPM در انجمن Node.js توزیع شوند.
این ماژولها به روشی مشابه به ماژولهای هستهای بارگذاری میشوند. در مثال کاربردی زیر روش انجام این کار را میبینید.
ایجاد فایل ماژولهای محلی یا سفارشی:
- var detail ={name:function(name){console.log('Name: '+ name);},domain:function(domain){console.log('Domain: '+ domain);}};module.exports= detail;
فراخوانی فایل ماژول در فایل اصلی اپلیکیشن
- var myLogModule = require('./Local_module.js');myLogModule.name('Edureka');myLogModule.domain('Education');
اکنون با استفاده از دستور زیر میتوانید این فایلها را اجرا کنید:
- node application.js
اکنون ببینیم ماژولهای خارجی چه هستند.
ماژولهای خارجی (External Modules)
ماژولهای خارجی یا طرف سوم را تنها با دانلود آنها از طریق NPM میتوان به کار برد. این ماژولها اغلب توسط دیگر توسعهدهندگان توسعه مییابند و استفاده از آنها رایگان است. Express، react، gulp، mongoose و mocha از بهترین ماژولهای اکسترنال هستند.
لود کردن ماژولهای طرف سوم به صورت سراسری
- npm install --g <module_name>
فراخوانی فایل ماژول در فایل اصلی اپلیکیشن:
- npm install --save <module_name>
فایل JSON
فایل package.json در Node.js قلب اپلیکیشن است. این فایل، فایل مانیفستی است که فرادادههای پروژه را در بر دارد. بنابراین، آشنایی و کار با این فایل برای توسعهی موفقیت آمیز پروژهی Node حائز اهمیت است.
فایل package.json اغلب از فرادادههای اپلیکیشن تشکیل شده است که به دو دستهی زیر تقسیم میشود:
1. تعیین ویژگیهای فراداده: این دسته شامل ویژگیهایی مانند نام پروژه، نسخهی فعلی ماژول، لایسنس، نوسیندهی پروژه، توضیحات پروژه و … است.
2. نوشتن به طور مستقیم داخل فایل: شما میتوانید به صورت مستقیم اطلاعات ضروری را داخل فایل package.json وارد کرده و آن را به پروژهی خود فراخوانی کنید.
تا کنون با اجزاء مختلف اپلیکیشن Node.js آشنا شدهاید. در بخش بعدی آموزش، برخی از اصول Node.js را معرفی خواهم کرد تا بتوانیم با آمادگی بیشتری پیش برویم.
برای یادگیری بیشتر میتوانید آموزش کامل کار با ساختار JSON در برنامه نویسی اندروید را مشاهده نمایید.
اصول Node.js
از آنجایی که Node.js یک فریمورک جاواسکریپت است، از ساختار جاواسکریپت استفاده میکند. اکنون، شما را با چند اصل Node.js آشنا خواهم کرد:
انواع داده
مانند هر زبان برنامهنویسی دیگری، Node.js نیز شامل انواع دادهها است که به دو نوع دادهی primitive و non-primitive تقسیم میشود.
انواع دادهی primitive عبارتند از:
1. رشته (String)
2. عدد (Number)
3. بولین (Boolean)
4. تهی (Null)
5. تعریف نشده (Undefined)
انواع دادهی non-primitive عبارتند از:
1. شی (Object)
2. داده (Data)
3. آرایه (Array)
متغیرها
متغیر نهادی است که از مقادیری نگهداری میکند که ممکن است در طی اجرای برنامه تغییر کنند. برای ایجاد یک متغیر در Node.js، باید از کلمهی کلیدی var استفاده کنید. مجبور نیستید یک نوع داده به آن اختصاص دهید، چون کامپایلر آن را به صورت اتوماتیک انتخاب میکند.
ساختار کلی
- var varName = value;
عملگرها
Node.js از عملگرهای زیر پشتیبانی میکند:
نوع عملگر | عملگرها |
محاسباتی | +, -, *, %, ++, — |
تخصیص | =, +=, -=, *=, /=, %= |
شرطی | =? |
مقایسه | ==, ===, !=, !==, >, >=, <, <= |
منطقی | &&, ||, ! |
بیتی | &, |, ^, ~, <<, >>, >>> |
توابع
توابع در Node.js قطعه کدی هستند که یک اسم دارند و برای دسترسی به عمل خاصی نوشته میشوند. برای ایجاد آن باید از کلمهی کلیدی function استفاده کنید. به طور کلی، تابع یک فرآیند دو مرحلهای است. مرحلهی اول تعریف کردن تابع است و مرحلهی دوم فراخوانی آن است. ساختار کلی تعریف و فراخوانی یک تابع در مثال زیر دیده میشود:
مثال:
- //Defining a functionfunction display_Name(firstName, lastName) {alert("Hello " + firstName + " " + lastName);}//Invoking the functiondisplay_Name("Park", "Jimin");
اشیاء (Objects)
شی یک نوع دادهی non-primitive است که میتواند تحت شرایط خصوصیات و متدها، از چند مقدار نگهداری کند. اشیاء در Node.js نهادهایی مستقل هستند چرا که هیچ مفهومی به نام کلاس وجود ندارد. دو روش برای ایجاد یک شی وجود دارد:
1. استفاده از لفظ Object
2. استفاده از سازندهی شی
مثال:
- // object with properties and methodvar employee = {//propertiesfirstName: "Minho",lastName: "Choi",age: 35,salary:50000,//methodgetFullName: function () {return this.firstName + ' ' + this.lastName}};
سیستم فایل (File System)
برای دستیابی به سیستم فیزیکی فایل، Node.js از ماژول fs استفاده میکند که تمام عملیات همزمان و غیرهمزمان فایل I/O را نگهداری میکند. این ماژول با استفاده از دستور زیر وارد برنامه میشود:
- var fs = require('fs');
برخی از کاربردهای کلی ماژول File System عبارتند از:
- خواندن فایلها
1. fs.readFile()
- var http = require('http');var fs = require('fs');http.createServer(function(req, res){fs.readFile('script.txt',function(err, data){res.writeHead(200,{'Content-Type':'text/html'});res.write(data);res.end();});}).listen(8080);
- ساختن فایلها
1. appendFile()
2. open()
3. writeFile()
- آپدیت کردن فایلها
1. fs.appendFile()
2. fs.writeFile()
- پاک کردن فایلها
1. fs.unlink()
- تغییر نام فایلها
1. fs.rename()
بنابراین با کمک این دستورها میتوانید تا حدود زیادی تمام عملیات موردنیاز را بر روی فایلهای خود اجرا کنید. اکنون یک قدم به جلو حرکت کرده تا ببینیم رویدادها چه هستند و چگونه در Node.js اجرا میشوند.
رویدادها (Events)
همانطور که پیشتر اشاره شد، اپلیکیشنهای Node.js تک موضوعی و رویداد محور هستند. Node.js به دلیل داده محور بودن از همزمانی پشتیبانی میکند و این امر باعث میشود تا از مفاهیمی مانند رویدادها و فراخوانی برگشتی (callback) استفاده کند. فراخوانی عملیاتهای غیرهمزمان به Node.js کمک میکند تا همزمانی را در اپلیکیشن حفظ کند.
اساسا، در یک اپلیکیشن Node.js، حلقهای اصلی وجود دارد که منتظر رویدادها میماند و به آنها گوش میکند و هر زمان که رویدادی کامل شود، آن حلقه فورا یک فراخوان برگشتی را آغاز میکند.
شکل زیر نحوهی اجرا شدن رویدادها در Node.js را نشان میدهد.
نکتهای که در این قسمت باید در نظر داشته باشید این است که علیرغم اینکه رویدادها بسیار مشابه عملیات فراخوانی برگشتی هستند اما تفاوتی در کارکرد آنها وجود دارد. زمانی که یک عملیات غیرهمزمان نتایج را بازمیگرداند، فراخوانهای برگشتی خوانده میشوند.
از طرف دیگر رویدادی که به طور کامل اجرا شده بر روی الگوی ناظر کار میکند. در Node.js، متدهایی که به رویدادها گوش میکنند ناظر (observer) نام دارند.
درست از لحظهای که یک رویداد راهاندازی میشود، عملیات شنونده آن نیز به صورت خودکار اجرا میشود. ماژولهای Event و کلاس EventEmitter، چندین رویداد تعبیهشده را فراهم میآورند که برای مقید کردن رویداد به شنونده رویداد به کار میروند. ساختار کلی آن از این قرار است:
مقید کردن رویداد به یک شنونده رویداد
- // Import events modulevar my_Events = require('events');// Create an eventEmitter objectvar my_EveEmitter = new my_Events.EventEmitter();
مقید کردن گردانندهی رویداد به رویداد
- // Binding event and event handlermy_EveEmitter.on('eventName', eventHandler);
اجرای یک رویداد
- // Fire an eventmy_EveEmitter.emit('eventName');
اکنون مواردی که در این بخش دربارهی رویدادهای Node.js یادگرفتهایم را پیادهسازی میکنیم. برنامهی زیر مثالی ساده از اجرای رویداد در Node.js را نشان میدهد.
- var emitter = require('events').EventEmitter;function iterateProcessor(num){var emt =new emitter();setTimeout(function(){for(var i =1; i <= num; i++){emt.emit('BeforeProcess', i);console.log('Processing Iteration:'+ i);emt.emit('AfterProcess', i);}},5000)return emt;}var it = iterateProcessor(5);it.on('BeforeProcess',function(info){console.log('Starting the process for '+ info);});it.on('AfterProcess',function(info){console.log('Finishing processing for '+ info);
در بخش بعدی آموزش Node.js ، اطلاعات کاملی دربارهی یکی از مهمترین ماژولهای Node.js ارائه خواهم کرد.
ماژول HTTP
به طور کلی، Node.js برای توسعه اپلیکیشن های سمت سرور استفاده می شود. اما با استفاده از این ماژول شما میتوانید به آسانی وب سرورهایی را به وجود بیاورید که میتوانند به درخواست های کاربران پاسخ دهند. همچنین این ماژول به وب ماژول ها ارجاع داده میشود و ماژولهایی همانند http و درخواست هایی را فراهم میآورد که کار Node.js در پردازش درخواست های سرور را آسان میسازد.
شما میتوانید این ماژول را به آسانی در اپلیکیشن Node.js تنها از طریق نوشتن کد زیر فراخوانی کنید:
- var http = require('http');
در مثال زیر، برنامهای نوشتهام که نشان میدهد یک وب سرور چگونه در Node.js توسعه داده میشود.
- //calling http libraryvar http = require('http'var url = require('url');//creating servervar server = http.createServer(function (req, res) {//setting content headerres.writeHead(200, ('Content-Type', 'text/html'));var q = url.parse(req.url, true).query;var txt = q.year + " " + q.month;//send string to responseres.end(txt);});//assigning 8082 as server listening portserver.listen(8082);
در قسمت بعدی خودآموز، دربارهی Express.js صحبت خواهیم کرد که در توسعهی اپلیکیشنهای وب سمت سرور بسیار به کار میرود.
Express.js
Express.js فریمورکی است که بر پایهی Node.js ساخته شده است و مدیریت جریان دادهها میان سرور و مسیرها را در اپلیکیشنهای سمت سرور آسان میکند. این فریمورک کمحجم و انعطافپذیر است و طیف گستردهای از ویژگیهای لازم را برای توسعهی اپلیکیشنهای موبایل و وب فراهم میآورد.
Express.js در ماژول میانافزار Node.js به نام connect توسعه مییابد. علاوه بر این، ماژول connect از ماژول http برای ارتباط با Node.js استفاده میکند. بنابراین اگر با هرکدام از ماژولهای میانافزار مبتنی بر connect کار میکنید، میتوانند به آسانی با Express.js ادغام شوند.
چند مزیت اصلی Express.js از این قرارند:
- توسعهی اپلیکیشنهای وب را سرعت میبخشد.
- به ساخت اپلیکیشنهای وب و موبایل تک صفحهای، چندصفحهای و انواع ترکیبی کمک میکند.
- Express دو موتور الگویی به نام Jade و EJS را ارائه میکند.
- Express، از معماری کنترلکنندهی پیکرنما یا MVC (Model-View-Controller) استفاد میکند.
- با دیتابیسهایی مانند MongoDB، Redis، MySQL ادغام میشود.
- یک میانافزار رفع خطا (error handling middleware) تعریف میکند.
- پیکربندی و سفارشیسازیها را برای اپلیکیشن ساده میکند.
با تمام این ویژگیها، Express مسئول بخش بکاند در استک MEAN است. استک Mean یک استک نرمافزاری متنباز جاواسکریپت است که برای ساختن اپلیکیشنهای وب و وبسایتهای پویا استفاده میشود. در اینجا، MEAN مخفف کلمات MongoDB، Express.js،AngularJS و Node.js است.
آموزش برنامهنویسی نرمافزارهای تکصفحهای وب با انگولار ۷
اکنون مثال سادهای برای درک چگونگی کار Express.js در Node.js را به منظور آسانتر شدن موضوع درنظر میگیریم. اما قبل از آنکه کار با Express.js را شروع کنیم، باید آن را در سیستم خود نصب کنید.
برای نصب Express.js به صورت سراسری میتوانید از دستور زیر استفاده کنید:
- npm install -g express
یا اگر بخواهید آن را به صورت محلی و بر روی پوشهی پروژهی خود نصب کنید، باید دستور زیر را اجرا کنید:
- npm install express --save
از آنجایی که مقدمات به پایان رسیدهاند، اجازه دهید مستقیما به سراغ پیادهسازی عملی برویم. در این قسمت، یک اپلیکیشن ساده¬ی تصدیق هویت کاربر (User Authentication) با استفاده از Node.js و Express.js نشان داده خواهد شد.
آموزش گام به گام Node.js – توسعهی اپلیکیشن با Express.js
برای انجام این کار، به فایلهای زیر نیاز داریم:
- package.json
- script.js
- views
- index.jade
- login.jade
- secure.jade
- unauthorized.jade
- welcome.jade
- lib
- routes.js
پس با package.json شروع میکنیم.
- {"author":"Edureka","name":"Express_Demo","description":"Express with Node.js","version":"0.0.0","scripts":{"start":"node script.js"},"engines":{"node":"~0.4.12"},"dependencies":{"connect-flash":"^0.1.1","cookie-parser":"^1.4.3","express":"^3.21.2","jade":"^0.20.3","req-flash":"0.0.3"},"devDependencies":{}}
در مرحلهی بعد، باید script.js را بسازید.
- var express = require('express');var http = require('http');var port =8999;var app = express();const flash = require('connect-flash');var cookieParser = require('cookie-parser')var server = http.createServer(app);function checkAuth (req, res, next){console.log('checkAuth '+ req.url);// don't serve /secure to those not logged inif (req.url === '/secure' && (!req.session || !req.session.authenticated)) {res.render('unauthorised', { status: 403 });return;}next();}app.use(flash());app.use(cookieParser());app.use(express.session({ secret: 'example' }));app.use(express.bodyParser());app.use(checkAuth);app.use(app.router);app.set('view engine', 'jade');app.set('view options', { layout: false });require('./lib/routes.js')(app);app.listen(port);console.log('Node listening on port %s', port)
اکنون، پوشهای به نام view بسازید که در آن فایلهای jade را اضافه خواهید کرد که مسئول بازدیدهای صفحه خواهند بود. اولین فایل بازدیدی که باید بسازید index.jade است.
- !!! ۵html(lang='en')headtitle User Authentication Example<link href="https://stackpath.bootstrapcdn.com/bootswatch/4.2.1/darkly/bootstrap.min.css" rel="stylesheet" integrity="sha384-F7cPHYSdE3FzBKvdxDKyFow9Y28Yq7KGHQOKpOI+rwc8s6jJnp///mpEJAib2EM6" crossorigin="anonymous">bodyh1center Authentication Demo using Expressh3 Navigate toh4ulli: a(href="/secure") Secure contentli: a(href="/welcome") Welcome pageli: a(href="/logout") Logout
اکنون فایل login.jade را بسازید.
- !!! ۵html(lang='en')headtitle Express authentication example<link href="https://stackpath.bootstrapcdn.com/bootswatch/4.2.1/darkly/bootstrap.min.css" rel="stylesheet" integrity="sha384-F7cPHYSdE3FzBKvdxDKyFow9Y28Yq7KGHQOKpOI+rwc8s6jJnp///mpEJAib2EM6" crossorigin="anonymous">bodyh1center Sign-in to this Express authentication examplecenterp Use <i>user</i> for the username and <i>pass</i>for the password.form(method='post')plabel(for='username') Email Addressinput(type='text', name='username',class='form-control', id='exampleInputPassword1', placeholder='Email', style='width:400px;')pcenterlabel(for='password') Passwordinput(type='password', name='password',class='form-control', id='exampleInputPassword1', placeholder='Password', style='width:400px;')pcenter <button type="submit"class="btn btn-info">Submit</button>- each message in flashh4(style="color: red;") #{message}
گام بعدی ساختن welcome.jade است.
- !!! ۵html(lang='en')headtitle User Authentication Example<link href="https://stackpath.bootstrapcdn.com/bootswatch/4.2.1/darkly/bootstrap.min.css" rel="stylesheet" integrity="sha384-F7cPHYSdE3FzBKvdxDKyFow9Y28Yq7KGHQOKpOI+rwc8s6jJnp///mpEJAib2EM6" crossorigin="anonymous">bodyh1center Welcome To The Edureka Tutorial!
سپس، فایل secure.jade را بسازید.
- !!! ۵html(lang='en')headtitle Express Authentication Example<link href="https://stackpath.bootstrapcdn.com/bootswatch/4.2.1/darkly/bootstrap.min.css" rel="stylesheet" integrity="sha384-F7cPHYSdE3FzBKvdxDKyFow9Y28Yq7KGHQOKpOI+rwc8s6jJnp///mpEJAib2EM6" crossorigin="anonymous">bodyh1center Hi, secure user.p Navigate toulli: a(href="/secure") Secure contentli: a(href="/welcome") Welcome pageli: a(href="/logout") Logout
اکنون، فایل unauthorized.jade را ایجاد کنید.
- !!! ۵html(lang='en')headtitle User Authentication Example<link href="https://stackpath.bootstrapcdn.com/bootswatch/4.2.1/darkly/bootstrap.min.css" rel="stylesheet" integrity="sha384-F7cPHYSdE3FzBKvdxDKyFow9Y28Yq7KGHQOKpOI+rwc8s6jJnp///mpEJAib2EM6" crossorigin="anonymous">bodyh1center Unauthorizedp You're unauthorized to view this page.p Please <a href="/login">login</a> to continue
اکنون باید پوشهای بسازید و نام آن را lib بگذارید. سپس یک فایل route.js بسازید که نقشهی تمام صفحات را ایجاد میکند.
- var util = require('util');module.exports=function(app){app.get('/',function(req, res, next){res.render('index');});app.get('/welcome',function(req, res, next){res.render('welcome');});app.get('/secure',function(req, res, next){res.render('secure');});app.get('/login',function(req, res, next){res.render('login',{flash: req.flash()});});app.post('/login',function(req, res, next){// you might like to do a database look-up or something more scalable hereif (req.body.username && req.body.username === 'user' && req.body.password && req.body.password === 'pass') {req.session.authenticated = true;res.redirect('/secure');} else {req.flash('error', 'Username and password are incorrect');res.redirect('/login');}});app.get('/logout', function (req, res, next) {delete req.session.authenticated;res.redirect('/');});};
با انجام این تمرین، به پایان این آموزش و یادگیری Node.js میرسیم. امیدوارم توانسته باشم مفاهیم Node.js را از ابتدا تا انتها توضیح دهم.