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

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

Express RoutingRoute MethodsRoute PathsRoute ParametersMiddlewareexpress.Routerapp.route()

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

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 می‌توان اپلیکیشن‌هایی ماژولار، خوانا و قابل نگهداری ساخت.

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

مقالات مرتبط

ادغام دیتابیس با 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 در Express.js: راهنمای کامل برای توسعه‌دهندگان

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

ادامه