عنوان مقاله :

مسیریابی در ExpressJS

گردآوری و تالیف : امیررضا سیستانه ای
تاریخ انتشار : 30 شهریور 1396
دسته بندی ها : نود جی اس

Express یکی از محبوب ترین فریمورک های Node.js هست و بسیاری از عملیات ها مثل رندر کردن, مسیریابی و غیره رو فراهم میکنه. در این آموزش می خواهیم بحث ()Router رو در فریمورک ExpressJS پوشش بدیم.

مسیریابی Express یک کلاس هست که به ما کمک می کنه که مسیرها رو بخوبی مدیریت کنیم. با استفاده از مدیر مسیریابی نه تنها میتونیم مسیرهای اپلیکیشن رو کنترل کنیم بلکه امکان مدیریت اعتبارسنجی, مدیریت 404 و سایر خطاها هم برای اون وجود داره.

پروژه ساده ی ما

برای نمایش نحوه ی کار مسیریابی در Express میخواهیم یک پروژه ساده رو قدم به قدم پیش ببریم. درنهایت شما کدنهایی که شامل سناریوهای زیر هست, رو خواهید داشت.

  1. مسیریابی پایه
  2. مسیریابی middleware
  3. دسترسی به پارامترها در مسیریابی
  4. مدیریت خطاهای 404
  5. مسیرهای نمونه برای اپلیکیشن

آماده سازی

فایل package.json ما بصورت زیر هست :

{

  "name": "expressRouter",

  "version": "0.0.1",

  "scripts": {

    "start": "node Server.js"

  },

  "dependencies": {

    "express": "^4.12.3"

  }

}

با استفاده از دستور npm install وابستگی ها رو نصب کنید.

فایل سرور Server.js :

var express = require("express");

var app = express();

//Creating Router() object
var router = express.Router();

// Provide all routes here, this is for Home page.
router.get("/",function(req,res){

  res.json({"message" : "Hello World"});

});


// Tell express to use this router with /api before.

// You can put just '/' if you don't want any sub path before routes.

app.use("/api",router);


// Listen to this Port

app.listen(3000,function(){

  console.log("Live at Port 3000");

});

برای اجرای اپلیکیشن دستور npm start رو بزنید. دستور start بصورت پیشفرض node Server.js رو برای ما اجرا میکنه.

شما باید همچین پیامی در ترمینال مشاهده کنید :

یک شبیه ساز Rest (مثل PostMan) رو باز کنید و آدرس زیر رو در اون وارد کنید :

http://localhost:3000/api/

شما پیام زیر رو مشاهده می کنید :

بیایید بیشتر درمورد middleware ها صحبت کنیم.

مسیریابی Middleware پایه ای

Middleware همینطور که از اسمش پیداست قبل از اینکه مسیر فراخوانی بشه, اجرا میشه. دلایل زیادی برای استفاده از این قابلیت وجود داره مثل گزارش گیری از هر درخواست یا فهمیدن اینکه درخواست درسته یا خیر. 

 

بیایید یک Middleware ساده تعریف کنیم که نوع درخواست (GET, POST, etc) رو برامون مشخص کنه.

Server.js

var express = require("express");

var app = express();

//Creating Router() object
var router = express.Router();

// Router middleware, mentioned it before defining routes.
router.use(function(req,res,next) {

  console.log("/" + req.method);

  next();

});

// Provide all routes here, this is for Home page.
router.get("/",function(req,res){

  res.json({"message" : "Hello World"});

});

// Tell express to use this router with /api before.

// You can put just '/' if you don't want any sub path before routes.
app.use("/api",router);

// Listen to this Port
app.listen(3000,function(){

  console.log("Live at Port 3000");

});

اپلیکیشن رو اجرا کنید و شما پیام زیر رو درکنسول می بینید :

تابع ()next مسیریاب شما رو به مسیرهای بعدی میبره.

دسترسی به پارامترها در مسیریابی

قبل از شرح این قسمت, ببینیم پارامترها در مسیرها چطور کار می کنند.

Route : http://example.com/api/:name/

Route with data : http://example.com/api/ali/

ما میتونیم به اسم ali در مسیر دسترسی پیدا کنیم. 

دسترسی در Middleware

با فرض اینکه نام پارامتر id هست :

// This middle-ware will get the id param

// check if its 0 else go to next router.

router.use("/user/:id",function(req,res,next){

  if(req.params.id == 0) {

    res.json({"message" : "You must pass ID other than 0"});    

  }

  else next();

});

دسترسی در Router

router.get("/user/:id",function(req,res){

  res.json({"message" : "Hello "+req.params.id});

});

این کد کاملش هست :

var express = require("express");

var app = express();

//Creating Router() object
var router = express.Router();

// Router middleware, mentioned it before defining routes.
router.use(function(req,res,next) {

  console.log("/" + req.method);

  next();

});

router.use("/user/:id",function(req,res,next){

  console.log(req.params.id)

  if(req.params.id == 0) {

    res.json({"message" : "You must pass ID other than 0"});    

  }

  else next();

});

// Provide all routes here, this is for Home page.
router.get("/",function(req,res){

  res.json({"message" : "Hello World"});

});

router.get("/user/:id",function(req,res){

  res.json({"message" : "Hello "+req.params.id});

});

// Tell express to use this router with /api before.
// You can put just '/' if you don't want any sub path before routes.
app.use("/api",router);

// Listen to this Port
app.listen(3000,function(){

  console.log("Live at Port 3000");

});

کد رو اجرا کرده و به آدرس http://localhost:3000/api/user/ali در postman برید. سپس جای ali عدد 0 رو بگذارید. 

بعد از وارد کردن عدد 0 پیغام خطای middle-ware رو مشاهده می کنید.

مدیریت خطاهای 404

این خطا برای وقتیه که مسیری پیدا نشه. برای اینکار ما یک middle-ware به انتهای هرمسیر میگذاریم که این خطا رو مدیریت کنه :

var express = require("express");

var app = express();

//Creating Router() object
var router = express.Router();


// Router middleware, mentioned it before defining routes.
router.use(function(req,res,next) {

  console.log("/" + req.method);

  next();

});

router.use("/user/:id",function(req,res,next){

  console.log(req.params.id)

  if(req.params.id == 0) {

    res.json({"message" : "You must pass ID other than 0"});    

  }

  else next();

});

// Provide all routes here, this is for Home page.
router.get("/",function(req,res){

  res.json({"message" : "Hello World"});

});

router.get("/user/:id",function(req,res){

  res.json({"message" : "Hello "+req.params.id});

});

// Handle 404 error. 
// The last middleware.
app.use("*",function(req,res){

  res.status(404).send('404');

});

// Tell express to use this router with /api before.
// You can put just '/' if you don't want any sub path before routes.
app.use("/api",router);


// Listen to this Port
app.listen(3000,function(){

  console.log("Live at Port 3000");

});

با اجرای اپلیکیشن و وارد کردن مسیر اشتباه یک متن مشاهده میکنید.

مسیرهای نمونه برای اپلیکیشن

var express = require("express");

var app = express();

var router = express.Router();


router.use(function (req,res,next) {

  console.log("/" + req.method);

  next();

});

router.use("/user/:id",function(req,res,next){

  console.log(req.params.id)

  if(req.params.id == 0) {

    res.json({"message" : "You must pass ID other than 0"});

  }

  else next();

});

router.get("/",function(req,res){

  res.sendFile(__dirname + "/public/index.html");

});

router.get("/about",function(req,res){

  res.sendFile(__dirname + "/public/about.html");

});

router.get("/user/:id",function(req,res){

  res.json({"message" : "Hello "+req.params.id});

});

app.use("/",router);

app.use("*",function(req,res){

  res.sendFile(__dirname + "/public/404.html");

});

app.listen(3000,function(){

  console.log("Live at Port 3000");

});

منبع

برچسب :

مقالات پیشنهادی

مدیریت خطاها در ExpressJS توسط Middleware

Express برای مدیریت مسیرهایش از الگوی طراحی middleware ها استفاده می کنه. همچنین Express برای ما middleware ساده ای فراهم می کنه تا بتونیم مدیریت هر خ...

رندر کردن فایل HTML در ExpressJS

ExpressJS به شما اجازه میده وب سرورهای سفارشی با توجه به نیازتون توسعه بدید. لازم نیست چندین پکیج نصب کنید تا بتونید فایل های HTML رو مدیریت کنید. اگر...

دیدگاه های ارزشمند شما

برای ارسال نظر لازم است ابتدا وارد سایت شوید
هیچ دیدگاهی تا به این لحظه برای این موضوع ثبت نشده است