Hãy ghi nhớ những kiến trúc middleware: Mỗi handler có thể thao tác các bối cảnh, và một trong hai phản ứng - hay - gọi next()
.
Bằng tiền đề này, bộ định tuyến nhanh về cơ bản là một chức năng phần mềm trung gian mà bạn có thể sử dụng sau khi "sửa" url.
(BTW, ứng dụng yêu cầu cũng là một chức năng, mặc dù tôi không chắc chắn nếu tôi khuyên bạn nên đi lại quá sớm trong chuỗi)
Dưới đây là một ví dụ kind'a:
const router = new require('express').Router()
const user = require('../model/user')
//assume user implements:
// user.byId(id) -> Promise<user>
// user.byMail(email) -> Promise<user>
const reqUser = userPromise => (req, res, next) =>
req.user
? next()
: userPromise(req)
.then(user => { req.user = user })
.then(next, next)
//assume the sever that uses this router has a
//standard (err, req, res, next) handler in the end of the chain...
const byId = reqUser(req => user.byId(req.params.id))
const byMail = reqUser(req => user.byMail(req.params.mail))
router.post('/by-id/:id/friends',
byId,
(req, res) => res.render('user-friends', req.user)
)
router.post('/by-email/:email/friends',
byMail,
(req, res, next) => {
req.url = `/by-id/${req.user.id}/friends`
next()
},
router
)
Nguồn
2018-01-09 09:30:59
tôi có một chút nhầm lẫn bởi thuật ngữ 'trang' là bạn đang tìm kiếm chuyển hướng từ điểm đầu cuối này đến điểm cuối khác? Ví dụ '/' {GET} yêu cầu đến '/ test' {POST} –
xin lỗi vì sự nhầm lẫn. ý tôi là chuyển hướng từ 'localhost: 3000 /' sang 'localhost: 3000/test' – neolicd