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

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

Express RoutingRoute MethodsRoute PathsRoute ParametersMiddlewareexpress.Routerapp.route()

~3 min read • Updated Dec 26, 2025

1. مقدمه‌ای بر Routing در Express


Routing مشخص می‌کند که برنامه چگونه به درخواست‌های HTTP در مسیرهای مختلف پاسخ دهد. هر مسیر شامل دو بخش است:

  • مسیر (Route Path)
  • متد HTTP (GET, POST, PUT, DELETE و ...)

Express از متدهای app.get()، app.post()، app.all() و app.use() برای تعریف مسیرها و middleware استفاده می‌کند.

2. Route Methods


هر متد مسیر در Express از متدهای HTTP مشتق شده است. مثال:

// GET route
app.get('/', (req, res) => {
  res.send('GET request to homepage')
})

// POST route
app.post('/', (req, res) => {
  res.send('POST request to homepage')
})

app.all() برای اجرای یک هندلر روی تمام متدهای HTTP استفاده می‌شود:

app.all('/secret', (req, res, next) => {
  console.log('Accessing secret section...')
  next()
})

3. Route Paths


مسیرها می‌توانند به شکل‌های مختلف تعریف شوند:

3.1 مسیرهای مبتنی بر رشته

app.get('/about', (req, res) => res.send('about'))
app.get('/random.text', (req, res) => res.send('random.text'))

3.2 مسیرهای مبتنی بر الگوهای رشته‌ای

(در Express 5 این الگوها تغییر کرده‌اند)

app.get('/ab?cd', (req, res) => res.send('ab?cd'))
app.get('/ab+cd', (req, res) => res.send('ab+cd'))
app.get('/ab*cd', (req, res) => res.send('ab*cd'))
app.get('/ab(cd)?e', (req, res) => res.send('ab(cd)?e'))

3.3 مسیرهای مبتنی بر Regular Expression

app.get(/a/, (req, res) => res.send('/a/'))
app.get(/.*fly$/, (req, res) => res.send('/.*fly$/'))

4. Route Parameters


پارامترهای مسیر بخش‌های پویا هستند که در req.params ذخیره می‌شوند.

app.get('/users/:userId/books/:bookId', (req, res) => {
  res.send(req.params)
})

مثال:

URL: /users/34/books/8989
req.params = { userId: "34", bookId: "8989" }

پارامترها می‌توانند شامل dash یا dot باشند:

/flights/:from-:to
/plantae/:genus.:species

پارامتر با regex محدود می‌شود:

app.get('/user/:id(\\d+)', ...)

5. Route Handlers


Express اجازه می‌دهد چندین callback برای یک مسیر تعریف کنید.

5.1 یک هندلر

app.get('/example/a', (req, res) => res.send('Hello A'))

5.2 چند هندلر پشت سر هم

app.get('/example/b', (req, res, next) => {
  console.log('Next handler...')
  next()
}, (req, res) => res.send('Hello B'))

5.3 آرایه‌ای از هندلرها

app.get('/example/c', [cb0, cb1, cb2])

5.4 ترکیب آرایه و هندلرهای مستقل

app.get('/example/d', [cb0, cb1], (req, res, next) => {
  next()
}, (req, res) => res.send('Hello D'))

6. Response Methods


متدهای مهم res که پاسخ را پایان می‌دهند:

متدتوضیح
res.send()ارسال پاسخ
res.json()ارسال JSON
res.redirect()ریدایرکت
res.render()رندر قالب
res.sendFile()ارسال فایل
res.download()دانلود فایل
res.sendStatus()ارسال کد وضعیت

7. app.route(): مسیرهای زنجیره‌ای


برای کاهش تکرار و ساخت مسیرهای ماژولار:

app.route('/book')
  .get((req, res) => res.send('Get a book'))
  .post((req, res) => res.send('Add a book'))
  .put((req, res) => res.send('Update a book'))

8. express.Router: ساخت ماژول‌های مسیر


Router یک «مینی‌اپلیکیشن» است که می‌توان آن را روی مسیرهای مختلف mount کرد.

مثال فایل birds.js

const router = express.Router()

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

router.get('/', (req, res) => res.send('Birds home'))
router.get('/about', (req, res) => res.send('About birds'))

module.exports = router

استفاده در برنامه اصلی

app.use('/birds', require('./birds'))

برای دسترسی به پارامترهای مسیر والد:

const router = express.Router({ mergeParams: true })

نتیجه‌گیری


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

Written & researched by Dr. Shahin Siami