Express
创建应用
创建项目根目录
mkdir express-demo
cd express-demo
初始化npm
配置
npm init
npm install express --save
package.json
文件内容
{
"name": "express-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "gx",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
新建index.js文件
let express = require('express')
let app = express()
app.listen(8000)
app.get('/', (req, res) => {
res.send('Hello Express')
})
一个简单的express
项目就搭建完成了
执行node命令启动项目
node index.js
运行结果
路由匹配
// 匹配请求url: /aa /aba /abcda等
app.get('/a*a', (req, res) => {
res.send(req.originalUrl)
})
// 匹配请求url: /a和/ab
app.get('/ab?', (req, res) => {
res.send(req.originalUrl)
})
// 匹配请求url: /a/bb等以/a/开头的url
app.get('/a/', (req, res) => {
res.send(req.originalUrl)
})
// 支持正则表达式匹配url
app.get('/abcd+', (req, res) => {
res.send(req.originalUrl)
})
路由参数
// 将参数userId放入url中
app.get('/:userId', (req, res) => {
res.send(req.params)
})
// 使用分隔符'-'和'.'分割url中的参数
app.get('/user/:userId-:userName.:userAge', (req, res) => {
res.send(req.params)
})
路由处理器
// 传入多个回调处理器,除了最后一个,前面的回调函数最后面要调用next()
app.get('/routers/handlers-1', (req, res, next) => {
console.log('first handler')
next()
}, (req, res, next) => {
console.log('second handler')
next()
}, (req, res) => {
console.log('last handler')
res.send('last handler')
})
// 数组形式传入回调处理器
let handler1 = (req, res, next) => {
console.log('handler1')
next()
}
let handler2 = (req, res, next) => {
console.log('handler2')
next()
}
app.get('/routers/handlers-2', [handler1, handler2], (req, res) => {
console.log('handler3')
res.send('handler3')
})
路由分级函数:app.route()
使用app.route()
处理同一个url
不同请求方法的接口请求
app.route('/manager')
.get((req, res) => {
res.send('get')
})
.post((req, res) => {
res.send('post')
})
.put((req, res) => {
res.send('put')
})
路由分级函数:app.use()
app.use()
可以将一类接口创建文件单独处理,方便维护
创建一个js
文件user-handler.js
let express = require('express')
let router = express.Router()
router.get('/:userId/get', (req, res) => {
console.log(req.baseUrl); // 输出结果 /user
console.log(req.url); // 输出结果 /11/get
console.log(req.originalUrl); // 输出结果 /user/11/get
res.send(req.params.userId)
})
.get('/post', (req, res) => {
console.log(req.url);
res.send('/post')
})
module.exports = router
在主文件中导入并使用
app.use('/user', require('./user-handler'))
以/user/
开头的url
请求会分配到user-handler.js
去处理