Express یکی از محبوب ترین فریمورک های Node.js هست و بسیاری از عملیات ها مثل رندر کردن, مسیریابی و غیره رو فراهم میکنه. در این آموزش می خواهیم بحث ()Router رو در فریمورک ExpressJS پوشش بدیم.
مسیریابی Express یک کلاس هست که به ما کمک می کنه که مسیرها رو بخوبی مدیریت کنیم. با استفاده از مدیر مسیریابی نه تنها میتونیم مسیرهای اپلیکیشن رو کنترل کنیم بلکه امکان مدیریت اعتبارسنجی, مدیریت 404 و سایر خطاها هم برای اون وجود داره.
پروژه ساده ی ما
برای نمایش نحوه ی کار مسیریابی در Express میخواهیم یک پروژه ساده رو قدم به قدم پیش ببریم. درنهایت شما کدنهایی که شامل سناریوهای زیر هست, رو خواهید داشت.
- مسیریابی پایه
- مسیریابی middleware
- دسترسی به پارامترها در مسیریابی
- مدیریت خطاهای 404
- مسیرهای نمونه برای اپلیکیشن
آماده سازی
فایل 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");
});
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید