Express برای مدیریت مسیرهایش از الگوی طراحی middleware ها استفاده می کنه. همچنین Express برای ما middleware ساده ای فراهم می کنه تا بتونیم مدیریت هر خطای run-time رو انجام بدیم. درصورت وجود خطای run-time اپلیکیشن شما متوقف نمیشه, درعوض اون middleware مدیریت خطا صدا زده میشه.
نمای کلی
عموما وقتی ما از middle-ware در Express استفاده می کنیم سه فیلد رو می فرستیم :
(req,res,next)
در مورد middle-ware مدیریت خطاها ما یک پارامتر اضافه به نام error نیز ارسال می کنیم :
(error,req,res,next)
شروع کار با یک کد ساده
کد Express.js زیر به همراه middle-ware ها در نظر بگیرید :
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser);
app.use(function(req,res,next) {
console.log("In second route");
next(); // go to next route.
});
app.listen(3000);
و این یکی همون قبلی هست اما با middle-ware مدیریت خطاها :
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser);
app.use(function(req,res,next) {
console.log("In second route");
next(); // go to next route.
});
// Error handling middle-ware
app.use(function(err,req,res,next) {
console.log("Error happens",err.stack);
});
app.listen(3000);
پروژه نمونه
بیایید یک پروژه کوچک برای اثبات این قضیه بسازیم. یک مسیر جدید ساخته و فایل package.json رو ایجاد کنید. راه پیشنهادی ما برای اینکار استفاده از npm init هست.
این کد package.json من هست :
{
"name": "express-handler",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Shahid Shaikh",
"license": "MIT"
}
حالا ماژول Express رو نصب می کنیم. برای نصب اون دستور زیر رو در ترمینال وارد کنید.
npm i --save express
شما ممکنه دسترسی sudo رو هم برای این نیاز داشته باشید. حالا بیاییم کد سرور رو بنویسیم.
سرور Express
این یک کد ساده ی سرور Express به همراه middle-ware مدیریت خطاست :
var express = require('express');
var app = express();
var router = express.Router();
router.get('/',function(req,res) {
res.send("Hello World!");
});
app.use('/',router);
app.use(function(err,req,res,next) {
console.log(err.stack);
res.status(500).send({"Error" : err.stack});
});
app.listen(3000);
اپلیکیشن رو با استفاده از node Server.js اجرا کنید و در مرورگر localhost:3000 رو مشاهده کنید. حالا باید تست کنیم که آیا مدیریت خطای ما کار می کنه یا خیر. برای تولید یک خطای run-time ما یک خطای تصادفی ارسال می کنیم تا ببینیم چطور اپلیکیشن اون رو متوجه میشه.
var express = require('express');
var app = express();
var router = express.Router();
router.get('/',function(req,res) {
throw new Error();
res.send("Hello World!");
});
app.use('/',router);
app.use(function(err,req,res,next) {
console.log(err.stack);
res.status(500).send({"Error" : err.stack});
});
app.listen(3000);
اپلیکیشن رو اجرا کرده و localhost:3000 رو باز کنید. شما باید در کنسول و مرورگر خطای زیر رو ببینید :
برای خروج از این حالت CTRL+C رو بزنید.
همینطور که مشاهده کردید, مدیریت خطای ما بدرستی کار کرد.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید