مدیریت خطاها در ExpressJS توسط Middleware
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 2 دقیقه

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

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 رو بزنید.

همینطور که مشاهده کردید, مدیریت خطای ما بدرستی کار کرد.

منبع 

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

مقالات برگزیده

مقالات برگزیده را از این قسمت میتوانید ببینید

مشاهده همه مقالات