可以方便、快速创建Web网站的服务器(提供web网页资源)或API接口服务器(提供API接口)
app.get('请求URL',function(req,res)=>{})
//req:请求对象(包括请求属性和方法)
//res:响应对象(包括响应属性和方法)
其中res.send()既可以响应JSON对象,又可以响应文本
req.query对象可以获取URL携带参数
获取动态参数
通过req.params对象,可访问带=到URL中,通过:匹配到的动态参数
//:后即为动态参数
app.get('/user/:id',(req,res)=>{//id可以有多个console.log(req.params)
})
静态资源处理
express.static()创建一个静态资源服务器;例如对外开放一个文件夹(但该文件名不会出现在URL中)
app.use(express.static())
app.use()用于注册全局中间件
路由
客户端请求与服务器处理函数之间的映射关系
由三部分组成,请求的类型、请求的额URL地址、处理函数
请求到达服务器后,经过路由匹配,成功后,调用对应处理函数
模块化路由
1.创建路由模块对应的JS文件
2.调用express.Router()函数创建路由对象
3.向路由对象挂载具体路由
4.使用module.exports向外共享路由对象
5.用app.use()函数注册路由模块
路由模块:
const express = require('express')const router = express.Router()router.get('/user/list', (req, res) => {res.send('qwertyu')
})module.exports = router
注册路由模块:
const express = require('express')const app = express()//服务器实例const router = require('./router.js')app.use(router)app.listen(3000, () => {console.log('running')
})
效果:
中间件
客户端的请求可以通过多个中间件预处理,完成响应
本质上也为处理函数,但参数中必须包含next函数,而路由处理函数中没有
next函数的作用:
多个中间件连续调用的关键,把流转关系转交给下一中间件
分类
应用级别中间件:
通过app.use()或app.get()或app.post(),绑定到app实例上的中间件
路由级别中间件:
绑定在express.Router()实例上
错误级别中间件:
捕获整个项目异常错误,防止崩溃
必须放在所有路由之后
express内置中间件:
express.static 快速托管静态资源的内置中间件
express.json 解析JSON格式的请求体数据
app.use(express.json())
express.urlencoded 解析URL-encoded格式的请求体数据
app.use(express.urlencoded({extended:false}))
第三方中间件:
const parser=require('body-parser')app.use(parser.urlencoded({ extended: false }))
自定义中间件
手动模拟express.urlencoded这样的中间件,解析post提交到服务器的表单数据