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