一、express能做什么
能方便快速的创建Web网站的服务器或API接口的服务器
二、express的基本使用
// 1、导入express
const express = require('express')
// 2、创建web服务器
const app = express()
// 4、监听客户端的get和post请求,并向客户端响应具体的内容
app.get('/user', (req, res) => {
res.send({ name:'qq',age: 18 })
})
app.post('/user', (req, res) => {
res.send('请求成功')
})
// 获取客户端发送过来的查询参数,req.query,默认是一个空对象
// http://127.0.0.1/?name=zs&age=20
app.get('/', (req, res) => {
console.log(req.params)
res.send(req.params)
})
// 获取url中的动态参数,req.params,默认是一个空对象
app.get('/user/:id/:name', (req, res) => {
console.log(req.params)
res.send(req.params)
})
// 3、调用app.listen(端口号,启动成功后得回调函数),启动服务器
app.listen(80, () => {
console.log('服务器运行~')
})
三、express托管静态资源
// app.use() 函数的作用,就是用来注册全局中间件。我自己的理解是定义和使用分开。
app.use(express.static('./public'))
app.use(express.static('./file'))
挂载路径前缀:
app.use(‘/demo’, express.static(‘./file’))
访问路径:https:127.0.0.1/demo/file
四、nodemon
发现代码发生变化,自动重启服务器:npm i -g nodemon
nodemon app.js
五、express路由
在express中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
express中的路由分3部分组成,分别是请求的类型,请求的url地址、处理函数。
app.method(path, handler){
...
}
路由模块化:
var express = require('express') // 导入express
var router = express.Router() // 创建路由对象
router.get('/user', (req, res) => { // 挂载路由
res.send({ name:'qq',age: 18 })
})
router.post('/user', (req, res) => { // 挂载路由
res.send('请求成功')
})
module.exports = router // 向外导出路由对象
六、express中间件
next(),把流转关系交给下一个中间件或路由
// 全局生效的中间件
app.use((req, res, next) => {
const time = Data.now()
// 为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
req.startTime = time
next()
})
app.get('/', (req, res) => {
res.send('page1' + req.startTime)
})
app.get('/user', (req, res) => {
res.send('page2' + req.startTime)
})
// 局部生效的中间件
const mw1 = (req, res, next) => {
const time = Data.now()
// 为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
req.startTime = time
next()
}
const mw2 = (req, res, next) => {
const time = Data.now()
// 为req对象,挂载自定义属性,从而把时间共享给后面的所有路由
req.startTime = time
next()
}
app.get('/', mw1, mw2, (req, res) => {
res.send('page1' + req.startTime)
})
app.get('/', (req, res) => {
res.send('page1')
})
注意事项:
- 一定要在路由之前注册中间件(除错误级别中间件)
- 客户端发来请求,可以连续调用多个中间件进行处理
- 不要忘记调用next()
- 为了防止代码逻辑混乱,在next()后不要写额外的代码
- 连续调用多个中间件时,多个中间件之间共享req和res