routing در express – بخش اول
اگر از علاقهمندان به nodejs باشید، حتما با فریمورک محبوب express.js که به صورت قدرتمند وظیفهی اجرای سرور رو بر عهده میگیره آشنایی دارید؛ در این مقاله قصد داریم با روشهای موجود در این فریمورک برای routing آشنا بشیم. با ما همراه باشید.
اگر نگاهی به مستندات express بندازید علاوه برتمام متدهایی که برای درخواستها درنظر گرفته شده، ۴ نوع درخواست(request) نگاهتون رو جلب میکنه که پایه و اساس عمل routing در این فریمورک هستند. اسم هرکدوم از این درخواستها به طور واضح کاربردشون رو مشخص میکنه که عبارتند از GET, POST, DELETE, PUT که از توضیح این قسمت پرهیز میکنیم و نحوهی استفاده از این درخواستها رو بررسی میکنیم.
اولین قدمی که برای استفاده از express انجام میدیم، import کردن و به دنبال اون اجرای express هست. نحوهی انجام این دو عمل رو در کد زیر میبینید. همچنین برای اطلاعات تکمیلی میتونید به این مقاله مراجعه کنید.
var express = require('express'); var app = express();
برای ایجاد یک route جدید میتونیم از متدهای get, post, delete, put استفاده کنیم و دو مقدار رو به عنوان آرگومان به شرح زیر به اون بدیم:
- آرگومان اول : مسیر رو مشخص میکنه.
- آرگومان دوم : تابعی که قصد اجرای اون رو داریم مشخص میکنه.
به مثال زیر توجه کنید:
app.get('/', function() { console.log('Home'); });
در آرگومان اول گفتیم که هر کاربری وارد صفحهی index سایت شد، و
در آرگومان دوم گفتیم که در console عبارت Home رو چاپ کن.
نتیجهی کار این شد که هربار وارد صفحهی index سایت بشیم، عبارت Home در console چاپ میشه. حالا اگه بخوایم هروقت وارد آدرس profile شدیم عبارت “You are in profile page” در console چاپ بشه، کد زیر رو مینویسیم:
app.get('/profile', function() { console.log('You are in profile page'); });
استفاده از request در get
تا اینجای کار فقط آدرس رو چک کردیم؛ ولی با کاربر ارتباط برقرار نکردیم. یعنی نه ورودی گرفتیم و نه خروجی دادیم. برای اینکار میتونیم از دو آرگومان req و res که به تابع بازگشتی پاس داده میشوند استفاده کنیم. با استفاده از req درخواست کاربر رو دریافت میکنیم و با استفاده از res پاسخی رو به سمت کاربر میفرستیم. مثال زیر رو نگاه کنید:
app.get('/', function(req, res) { console.log(req); res.send('Hi'); });
اول از همه req رو چاپ کردیم که مربوط به درخواست کاربر میشه؛ البته فعلا با یک object خیلی بزرگ روبرو میشید (اگه میخواید فقط اطلاعاتی که به صورت خالص از سمت کاربر فرستاده شده رو بخونید از req.params استفاده کنید).
در قدم دوم عبارت “hi” رو با استفاده از res.send به کاربر فرستادیم.
از اونجایی که get درخواستها رو با استفاده از url جابجا میکنه، برای گرفتن ورودی از کاربر باید تغییر کوچکی در نحوهی گرفتن url ایجاد کنیم. کد زیر رو ببینید:
app.get('/:name', function(req, res) { console.log(req.params); });
در آرگومان اول که مربوط به url بود، عبارت :name رو وارد کردیم، یعنی اینکه هر عبارتی بعد از / وارد شد به عنوان پارامتری به اسم name به req اضافه کن. الان اگه این کد رو اجرا کنید objectی دریافت میکنید که کلید name و مقداری که در url وارد شده توی اون قرار داره. اگه بخوایم به پارامتر name دسترسی داشته باشیم، عبارت req.params.name رو مینویسیم.
استفاده از response در get
حالا نوبت به response میرسه. با استفاده از پارامتر res که دریافت میکنیم میتونیم اطلاعاتی رو به کاربر بفرستیم. در این حالت عمدتا یکی از این دو نوع کار رو انجام میدن. اول اینکه با استفاده از متد send اطلاعات به کاربر فرستاده میشه. دوم اینکه با استفاده از متد render صفحهای برای کاربر بارگذاری میشه. مثال زیر کاربردی از متد send رو نمایش میده:
app.get('/:title', function(req, res) { var res_data = {}; if (req.params.title == "title1") { res_data = {"status": 1, "error": ""} } else { res_data = {"status": 0, "error": "this is not one"} } res.send(res_data); });
در کد بالا گفتیم که هر عبارتی بعد از / (بعد از اسم سایت) وارد شد رو در متغیری به نام title بریز و به request اضافه کن. بعد مشخص کردیم که در صورت برابر بودن یا نبودن title با عبارت title1، اطلاعات خاصی در آبجکت res_data ریخته شود. در آخر با نوشتن res.send(res_data) این آبجکت رو به کاربر میفرستیم.
مثال زیر کاربردی از متد render رو نمایش میده:
app.set('view engine', 'ejs'); app.get('/', function(req, res) { res.render('index'); });
در خط اول به اپلیکیشن گفتیم که از موتور نمایش ejs استفاده کن (ejs و jade و موارد دیگه شبیه به اینها در نوع سینتکس مورد استفاده تفاوت دارند. برای مثال در ejs کد html رو به صورت عادی مینویسیم و بخش هایی که میخوایم کدهای ejs رو وارد میکنیم ولی در jade کلا نوع نوشتن کدهای html هم متفاوت هست). در خط چهارم گفتیم که صفحهای با نام index رو بارگذاری کن.
چند نکته در این قسمت وجود داره که قبل از اجرای کد باید اونها رو رعایت کنید:
۱- ماژول ejs رو قبل از استفاده کردن نصب کنید.
npm install --save ejs
2- خط اولی که نوشتیم فقط یک بار در کل برنامه نوشته میشه و نیاز نیست هر دفعه قبل از هر route این رو بنویسید.
۳- در پوشهی اصلی پروژتون فولدری با نام views ایجاد کنید و توی اون فایلی به نام index با پسوند ejs ذخیره کنید. فولدر views جایی هست که صفحه هاتون رو توی اون ذخیره میکنید. فایل index.ejs همون صفحهای هست که توی کد بالا مشخص کردیم که به کاربر نمایش داده بشه.
تا اینجای کار صفحهای داریم که به کاربر نمایش بدیم. در بخش دوم این مقاله یاد میگیریم که
۱- چطور اطلاعاتی رو به این صفحه ها بفرستیم.
۲- چطور از چندین تابع برای یک route استفاده کنیم.
۳- چطور از متد post استفاده کنیم.
۴- چطور از متد all استفاده کنیم!
۵- چطور از متد express.Router() استفاده کنیم.
با ما همراه باشید.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.