ابزار Express یک فریمورک اپلیکیشن وب برای Node.js است که باعث میشود بتوانید از APIها و وبسرورها به نحوه سادهتر و مشخصتری استفاده کنید. در واقع، این بسته سبک است که همچنان ویژگیهای هسته Node.js را حفظ میکند. در این مطلب، به نصب و نحوه استفاده از Express برای ساخت یک وبسرور خواهیم پرداخت. با ما همراه باشید.
پیشنیازها
در صورتی که بخواهید مراحل این آموزش را دنبال کنید، به موارد زیر احتیاج خواهید داشت.
- یک محیط توسعه لوکال برای Node.js
- این آموزش برای نسخههای Node v15.14.0، npm v7.10.0، express v4.17.1 و serve-index v1.9.1 تأیید شده است.
گام ۱) تنظیمات پروژه
ابتدا پنجره ترمینال خود را باز کنید و یک دایرکتوری پروژه جدید ایجاد نمایید.
mkdir express-example
حالا به سراغ این دایرکتوری که تازه ساختهاید، بروید.
cd express-example
در اینجا میتوانید یک پروژه جدید npm را کلید بزنید.
npm init -y
سپس باید بسته ابزار Express را نصب کنید.
npm install express@4.17.1
در نتیجه یک پروژه جدید برای استفاده از Express در اختیار خواهید داشت.
گام ۲) ایجاد یک سرور Express
حالا که ابزار Express نصب شده، یک فایل server.js جدید ایجاد کنید و آن را با یک ویرایشگر کد باز نمایید. سپس خطوط کد زیر را در آن اضافه کنید.
const express = require('express'); const app = express();
اولین خط باعث فراخوانی ماژول اصلی Express از بسته نصبشده میشود. این ماژول به صورت یک تابع است که آن را در خط دوم برای ساخت متغیر اپلیکیشن اجرا میکنیم. به این ترتیب میتوانید چندین اپلیکیشن که هر کدام درخواستها و پاسخهای خود را داشته باشند، ایجاد کنید.
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Successful response.'); });
نحوه مدیریت درخواست GET به سرور در این خط کدها به سرور Express توضیح داده می شود. ابزار Express شامل توابع مشابه برای POST، PUT و … به صورت app.post(…) و app.put(…) است. این توابع دارای دو پارامتر اصلی هستند. اولین پارامتر، آدرسی که باید برای آن عمل کند. در اینجا هدف به صورت ‘/’ تعریف شده که بیانگر ریشه اصلی وبسایت ما و localhost:3000 است.
دومین پارامتر، تابعی دارای دو آرگومان req و res است. req بیانگر درخواستی است که به سرور ارسال شده است. میتوانیم از این آبجکت برای خواندن دادههای مربوط به درخواست کلاینت استفاده کنیم. res نیز بیانگر پاسخی است که به کلاینت برگشت خواهیم داد.
در اینجا یک تابع را بر روی res فرخوانی میکنیم تا پاسخ ‘Successful response.’ را در پاسخ ارسال کند.
const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Successful response.'); }); app.listen(3000, () => console.log('Example app is listening on port 3000.'));
نهایتاً وقتی درخواستهایمان را تنظیم کردیم، باید سرور را راهاندازی کنیم. پورت 3000 را برای تابع listen وارد میکنیم. تابعی که به عنوان پارامتر دوم وارد میشود، به صورت اختیاری است و در هنگام راهاندازی سرور اجرا میگردد. در نتیجه، میتوانیم از طریق بازخورد کنسول متوجه شویم که اپلیکیشن در حال اجراست یا خیر.
دوباره به سراغ پنجره ترمینال بروید و اپلیکیشن خود را راهاندازی کنید.
node server.js
سپس آدرس localhost:3000 را در مرورگر وب باز کنید. در نتیجه، مرورگر پیغام ‘Successful response’ را برایتان نمایش خواهد داد. همچنین پنجره ترمینال، پیام ‘Example app is listening on port 3000.’ را به شما نشان میدهد.
در نتیجه، یک وبسرور برای این منظور ایجاد کردیم. مسلماً برای پاسخ به کلاینت، به چیزی بیشتر از یک خط متن در پاسخ احتیاج داریم. بر این اساس، در ادامه مفهوم Middleware را بررسی میکنیم و اینکه چگونه این سرور به عنوان سرور فایل استاتیک تنظیم میشود.
گام ۳) کاربرد Middleware
ما با کمک ابزار Express میتوانیم توابع Middleware را نوشته و از آنها استفاده کنیم. این توابع به تمام درخواستهای HTTP ورودی به سرور دسترسی دارند و قادرند موارد زیر را انجام دهند:
- اجرا هر گونه کد
- ایجاد تغییر در آبجکتهای درخواست و پاسخ
- خاتمه چرخه درخواست-پاسخ
- فراخوانی تابع middleware بعدی در سری توابع
این امکان برای ما وجود دارد که توابع middleware خودمان را بنویسیم و یا اینکه به مانند سایر بستهها، توابع middleware ثالث را وارد کنیم.
با نوشتن middleware خودمان شروع میکنیم و سپس برخی توابع middleware موجود را امتحان میکنیم.
برای تعریف یک تابع middleware، app.use() را فراخوانی و یک تابع به آن اختصاص میدهیم. در اینجا یک تابع پایه middleware برای چاپ زمان کنونی کنسول برای هر کدام از درخواستها مشاهده میکنید.
const express = require('express'); const app = express(); app.use((req, res, next) => { console.log('Time: ', Date.now()); next(); }); app.get('/', (req, res) => { res.send('Successful response.'); }); app.listen(3000, () => console.log('Example app is listening on port 3000.'));
فراخوانی next() به middleware میگوید که در صورتی که تنها یک مورد وجود داشت، به سراغ تابع middleware بعدی برود. در هر صورت، برای جلوگیری از قفلشدن درخواست در این middleware، استفاده از next() در انتهای تابع لازم خواهد بود.
همچنین میتوانیم یک مسیر به middleware اختصاص دهیم. در نتیجه، درخواستها تنها در این مسیر هدایت میشوند. به عنوان مثال:
const express = require('express'); const app = express(); app.use((req, res, next) => { console.log('Time: ', Date.now()); next(); }); app.use('/request-type', (req, res, next) => { console.log('Request type: ', req.method); next(); }); app.get('/', (req, res) => { res.send('Successful response.'); }); app.listen(3000, () => console.log('Example app is listening on port 3000.'));
با وارد کردن ‘/request-type’ به عنوان اولین آرگومان برای app.use()، این تابع تنها برای درخواستهایی اجرا میشود که به localhost:3000/request-type ارسال شده باشند.
دوباره به سراغ پنجره ترمینال رفته و اپلیکیشن خود را اجرا کنید.
node server.js
سپس از آدرس localhost:3000/request-type در مرورگرتان بازدید کنید. در نتیجه، بازه زمانی درخواست و پیام ‘Request type: GET’ در پنجره ترمینال نمایش داده خواهند شد.
حالا میخواهیم از middleware های موجود به عنوان فایلهای استاتیک سرور استفاده کنیم. ابزار Express شامل یک تابع middleware داخلی با عنوان express.static است. همچنین از تابع middleware ثالث serve-index برای نمایش لیست فایلها استفاده خواهیم کرد.
ابتدا در همان فولدری که سرور express قرار گرفته، یک دایرکتوری با نام public ایجاد کنید و برخی فایلها را در آن وارد نمایید.
سپس بسته serve-index را نصب میکنیم.
npm install serve-index@1.9.1
بسته serve-index را به فایل سرور انتقال میدهیم.
سپس express.static و serveIndex را وارد کرده و مسیر دستی و عنوان دایرکتوری را برای آنها مشخص میکنیم.
const express = require('express'); const serveIndex = require('serve-index'); const app = express(); app.use((req, res, next) => { console.log('Time: ', Date.now()); next(); }); app.use('/request-type', (req, res, next) => { console.log('Request type: ', req.method); next(); }); app.use('/public', express.static('public')); app.use('/public', serveIndex('public')); app.get('/', (req, res) => { res.send('Successful response.'); }); app.listen(3000, () => console.log('Example app is listening on port 3000.'));
اکنون سرور را دوباره راهاندازی کنید و به سراغ آدرس localhost:3000/public. بروید. در نتیجه، لیستی از تمام فایلها را مشاهده خواهید کرد.
جمعبندی
در این آموزش با نحوه نصب و استفاده از ابزار Express به منظور ساخت یک وبسرور آشنا شدیم. همچنین نحوه استفاده از توابع middleware داخلی و ثالت مورد بررسی قرار گرفت. امیدواریم که این مطلب نیز مورد توجه قرار گرفته باشد.