میانجی (Middleware) در Express JS

قبل از هر چیز ، Middleware چیست ؟

به طور ساده به عنوان یک راه ورودی در نظر بگیرید که Request ها اول از همه باید از اینجا عبور کنند و سپس به Handler برسند.

در Express برای اینکه بتوانیم یک middleware بنویسیم از متد زیر استفاده میکنیم :

app.use(path,callbak)

این متد یک پارامتر اختیاری (path) و یک پارامتر اجباری (callback) میگیرد.

فرض کنید قصد داریم تا Date و Method و آدرس درخواست داده شده به سرور رو در جایی ثبت کنیم، برای این کار یک middleware قبل از تمام Route ها تعریف میکنیم :

//instantiate the Express.js app
app.use(function(req, res, next) {
    console.log('%s %s — %s', (new Date).toString(), req.method, req.url);
    return next();
});
 //implement server routes

از طرف دیگر فرض کنید میخواهیم که این اتفاق فقط برای مسیرهایی که با الگوی admin/ شروع میشوند بیافتد، در این حالت از پارامتر اختیاری path استفاده میکنیم :

//instantiate the Express.js app
app.use('/admin', function(req, res, next) {
    console.log('%s %s — %s', (new Date).toString(), req.method, req.url);
    return next();
 });
....
app.get('admin/login', (req,res) => {
    // TODO
});

حال هر درخواستی که از مسیر /admin گذر کند اول این لاگ چاپ میشود.

میدلویر ها کاربردهای زیادی دارند به طور مثال میتوان از آنها برای محدود کردن سطوح دسترسی استفاده کرد.