ستفاده از Middleware در Express.js: راهنمای کامل و کاربردی

ستفاده از Middleware در Express.js: راهنمای کامل و کاربردی

Express MiddlewareApplication-level MiddlewareRouter-level MiddlewareError-handling MiddlewareBuilt-in MiddlewareThird-party Middleware

~3 دقیقه مطالعه · آخرین به‌روزرسانی ۵ دی ۱۴۰۴

1. Middleware چیست؟


Middleware تابعی است که به سه چیز دسترسی دارد:

  • req: شیء درخواست
  • res: شیء پاسخ
  • next: تابعی برای انتقال کنترل به Middleware بعدی

Middleware می‌تواند:

  • هر نوع کدی اجرا کند
  • req یا res را تغییر دهد
  • چرخهٔ درخواست–پاسخ را خاتمه دهد
  • یا با next() کنترل را منتقل کند

اگر Middleware چرخهٔ درخواست–پاسخ را پایان ندهد، حتماً باید next() را صدا بزند، در غیر این صورت درخواست معلق می‌ماند.

2. انواع Middleware در Express


  • Middleware سطح برنامه (Application-level)
  • Middleware سطح Router
  • Middleware مدیریت خطا
  • Middleware داخلی (Built-in)
  • Middleware شخص ثالث (Third-party)

3. Middleware سطح برنامه (Application-level)


3.1 Middleware بدون مسیر

برای هر درخواست اجرا می‌شود:

app.use((req, res, next) => {
  console.log('Time:', Date.now())
  next()
})

3.2 Middleware با مسیر مشخص

app.use('/user/:id', (req, res, next) => {
  console.log('Request Type:', req.method)
  next()
})

3.3 Middleware در مسیر GET

app.get('/user/:id', (req, res) => {
  res.send('USER')
})

3.4 زیرپشتهٔ Middleware

app.use('/user/:id',
  (req, res, next) => {
    console.log('Request URL:', req.originalUrl)
    next()
  },
  (req, res, next) => {
    console.log('Request Type:', req.method)
    next()
  }
)

4. چندین Route برای یک مسیر


app.get('/user/:id', (req, res, next) => {
  console.log('ID:', req.params.id)
  next()
}, (req, res) => {
  res.send('User Info')
})

app.get('/user/:id', (req, res) => {
  res.send(req.params.id)
})

Route دوم هرگز اجرا نمی‌شود، چون Route اول پاسخ را ارسال کرده است.

5. استفاده از next('route')


برای رد کردن بقیهٔ Middlewareهای یک مسیر:

app.get('/user/:id', (req, res, next) => {
  if (req.params.id === '0') next('route')
  else next()
}, (req, res) => {
  res.send('regular')
})

app.get('/user/:id', (req, res) => {
  res.send('special')
})

6. Middleware به‌صورت آرایه


function logOriginalUrl(req, res, next) {
  console.log('Request URL:', req.originalUrl)
  next()
}

function logMethod(req, res, next) {
  console.log('Request Type:', req.method)
  next()
}

const logStuff = [logOriginalUrl, logMethod]

app.get('/user/:id', logStuff, (req, res) => {
  res.send('User Info')
})

7. Middleware سطح Router


مشابه سطح برنامه، اما روی یک Router اعمال می‌شود:

const router = express.Router()

router.use((req, res, next) => {
  console.log('Time:', Date.now())
  next()
})

router.use('/user/:id',
  (req, res, next) => {
    console.log('Request URL:', req.originalUrl)
    next()
  },
  (req, res, next) => {
    console.log('Request Type:', req.method)
    next()
  }
)

router.get('/user/:id', (req, res, next) => {
  if (req.params.id === '0') next('route')
  else next()
}, (req, res) => {
  res.render('regular')
})

router.get('/user/:id', (req, res) => {
  res.render('special')
})

app.use('/', router)

next('router')

برای خروج از Router:

router.use((req, res, next) => {
  if (!req.headers['x-auth']) return next('router')
  next()
})

8. Middleware مدیریت خطا


باید چهار آرگومان داشته باشد:

app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})

9. Middleware داخلی Express


  • express.static: سرو فایل‌های استاتیک
  • express.json: پارس JSON
  • express.urlencoded: پارس فرم‌های URL-encoded

10. Middleware شخص ثالث


مثال: cookie-parser

npm install cookie-parser

const cookieParser = require('cookie-parser')
app.use(cookieParser())

نتیجه‌گیری


Middleware ستون فقرات Express است. با استفاده از آن می‌توان جریان درخواست‌ها را کنترل کرد، داده‌ها را اعتبارسنجی کرد، خطاها را مدیریت کرد، و ساختارهای ماژولار و قابل نگهداری ساخت. تسلط بر Middleware یعنی تسلط بر Express.

نوشته و پژوهش‌شده توسط دکتر شاهین صیامی

مقالات مرتبط

ادغام دیتابیس با Express.js: راهنمای کامل درایورهای محبوب Node.js

Express.js به‌صورت پیش‌فرض هیچ دیتابیسی را مدیریت نمی‌کند، اما انعطاف‌پذیری آن باعث می‌شود بتوانید تقریباً به هر دیتابیس SQL یا NoSQL متصل شوید. کافی است درایور مناسب Node.js را نصب کرده و از API آن در برنامهٔ Express استفاده کنید. این مقاله نحوهٔ اتصال Express به محبوب‌ترین دیتابیس‌ها را همراه با مثال‌های واقعی توضیح می‌دهد.

ادامه

Express.js پیشرفته: بازنویسی API، استفاده از Template Engine، Debugging

Express.js پیشرفته: بازنویسی API، استفاده از Template Engine، Debugging و کار با Reverse Proxy

ادامه

بازنویسی API در Express و استفاده از Template Engineها

Express.js یک فریم‌ورک مینیمال و انعطاف‌پذیر است که بخش زیادی از قابلیت‌های آن از طریق متدها و ویژگی‌های موجود در request و response ارائه می‌شود. این متدها و ویژگی‌ها از طریق prototype به ارث می‌رسند و همین موضوع امکان بازنویسی (Override) و گسترش (Extend) API را فراهم می‌کند. علاوه بر این، Express از سیستم Template Engine پشتیبانی می‌کند تا بتوان صفحات HTML را به‌صورت پویا تولید کرد. این مقاله هر دو موضوع—بازنویسی API و استفاده از Template Engine—را به‌صورت کامل و کاربردی توضیح می‌دهد.

ادامه

نوشتن Middleware در Express.js: راهنمای کامل برای توسعه‌دهندگان

Middleware در Express.js یکی از مهم‌ترین مفاهیم برای کنترل جریان درخواست‌ها، افزودن قابلیت‌ها، اعتبارسنجی، لاگ‌گیری، مدیریت خطا و ساخت معماری‌های ماژولار است. Middlewareها به سه عنصر اصلی دسترسی دارند: req، res و next. این توابع می‌توانند درخواست را تغییر دهند، پاسخ را ارسال کنند، یا کنترل را به middleware بعدی بسپارند. این مقاله تمام مفاهیم کلیدی Middleware—از ساخت ساده‌ترین نمونه تا Middlewareهای async، مدیریت خطا، و Middlewareهای قابل پیکربندی—را به‌صورت کامل و کاربردی توضیح می‌دهد.

ادامه

Routing در Express.js تعیین می‌کند که برنامه چگونه به درخواست‌های

Routing در Express.js تعیین می‌کند که برنامه چگونه به درخواست‌های HTTP در مسیرهای مختلف پاسخ دهد. این سیستم قدرتمند و انعطاف‌پذیر امکان تعریف مسیرهای ساده، الگوهای پیچیده، پارامترهای پویا، چندین هندلر، و ساختارهای ماژولار مبتنی بر Router را فراهم می‌کند. این مقاله تمام مفاهیم کلیدی Routing—از مسیرهای ساده تا Regex، پارامترها، middleware، app.route() و express.Router—را به‌صورت کامل و کاربردی توضیح می‌دهد.

ادامه