框架
express
路由
创建服务器,并会对 /
路径响应,支持原生的 res.write()
写法, res.send()
接受 HTML
和对象
const app = express()
app.get('/', (req, res) => {
res.send('this is express')
})
app.listen(3000, () => {
console.log('server start')
})
提供了一些占位符来响应某些特定的路由
app.get('/ab?cd', (req, res) => {
res.send('/abcd|/acd')
})
app.get('/ab/:id', (req, res) => {
res.send('/ab/xx')
})
app.get('/ab+cd', (req, res) => {
res.send('/abbbbbcd')
})
app.get('/ab*cd', (req, res) => {
res.send('/abfkesuhcd')
})
app.get('/ab(cd)?e', (req, res) => {
res.send('/abcde|/abe')
})
当然也支持正则表达式
app.get(/api$/, (req, res) => {
res.send('/xxapi')
})
中间件
路径后面的函数称之为中间件,也就是在响应内容之前做一些事情,中间件可以有多个,通过 next()
来继续
app.get(
'/home',
(req, res, next) => {
const isValid = true
if (isValid) {
next()
} else {
res.send('fail')
}
},
(req, res) => {
res.send({ result: [] })
}
)
或者将它们分离出来,传入一个数组代替
const check = (req, res, next) => {
const isValid = true
if (isValid) {
next()
} else {
res.send('fail')
}
}
const back = (req, res) => {
res.send({ result: [] })
}
app.get('/list', [check, back])
应用级中间件
以上都可以算是应用级中间件,直接挂载在 express()
上
如果要在所有中间件前添加一个中间件可以这样
app.use((req, res, next) => {
console.log('before all')
next()
路由级中间件
通过 express.Router()
创建一个路由,然后在这个路由上挂载中间件
const router = express.Router()
router.get('/a', (req, res) => {
res.send('a')
})
接着可以将它导出,然后在 express()
上使用
app.use('/', router)
通过路由级中间件,我们可以把路由进行更细致的划分,比如将 api 统一管理
const router = express.Router()
router.get('/a', (req, res) => {
res.send('a')
})
router.get('/b', (req, res) => {
res.send('b')
})
const app = express()
app.use('/api', router)
// /api/a /api/b