Route 路由
基础使用
const express = require('express')
const app = express()
const bodyParser = require('body-parser');
const port = 7890
const user = [
{ name: 'LiLei', sex: 'male', age: '18' },
{ name: 'Lucy', sex: 'female', age: '18' }
]
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/user', (req, res) => {
res.send(user)
})
app.post('/user', (req, res) => {
user.push(req.body)
res.send(user)
})
app.put('/user', (req, res) => {
debug('body: %o', req.body)
let index = user.findIndex(item => {
return item.name === req.body.name
})
index >=0 ? user[index] = req.body : user.push(req.body)
res.send(user)
})
app.delete('/user', (req, res) => {
debug('body: %o', req.body)
let index = user.findIndex(item => {
return item.name === req.body.name
})
user.splice(index, 1)
res.send(user)
})
app.all('/user', (req, res) => {
})
路由的正则匹配参照
- 这一部分,
Express
是使用path-to-regexp
来匹配路由串
- 像这样的使用,在
React``Vue
等前端框架上都有体现
app.get('/ab*ef', callback)
app.get('/ab?cd', callback)
app.get('/ab+cd', callback)
app.get('/ab(cd)?ef', callback)
app.get(/.*fly$/, cb)
路由带参
app.get('/users/:userId/books/:bookId', function (req, res) {
res.send(req.params)
})
app.get('/flights/:from-:to', function (req, res) {
res.send(req.params)
})
app.get('/location/:province.:city', function (req, res) {
res.send(req.params)
})
多级回调来灵活处理请求
app.get('/example/b', function (req, res, next) {
console.log('the response will be sent by the next function ...')
next()
}, function (req, res) {
res.send('Hello from B!')
})
var cb0 = function (req, res, next) {
console.log('CB0')
next()
}
var cb1 = function (req, res, next) {
console.log('CB1')
next()
}
var cb2 = function (req, res) {
res.send('Hello from C!')
}
app.get('/example/c', [cb0, cb1, cb2])
app.get('/example/c', [cb0, cb1, cb2], () => {}, () => { res.send() })
使用app.route()
链式构建路由结构
app.route('/user(/:id)?')
.get(function (req, res) {
let id = req.params.id
if (id) {
} else {
}
})
.post(function (req, res) {
res.send('post success')
})
.delete((req, res => {
let id = req.params.id
if (id) {
} else {
}
}))
使用express.Router
类实例化router
对象,并像中间件一样使用他们
- 这种方法看起来会更灵活
- 不过,实际上还是要根据不同的情况去使用
router.get('/', function (req, res) {
res.send('Birds home page')
})
router.get('/about', function (req, res) {
res.send('About birds')
})
module.exports = router
const routeBird = require('./bird')
app.use('/bird', routeBird)