node.js中的Express-路由-express中间件( 三 )


8.4.内置中间件 .快速托管静态资源的内置中间件 如:,html文件,图片,css样式等(无兼容性).json 解析JSON格式的请求体数据(有兼容性,4.16.0+版本可用).解析URL-格式的请求体数据(有兼容性,4.16.0+版本可用)
eg: .json() 代码:
//通过express.json()这个中间件,解析表单数据app.use(express.json())app.post('/user', (req, res) => {//在服务器,使用req.body这个属性,来接受客户端发送过来的请求体数据//默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefinedconsole.log(req.body);res.send('ok')})
在里面发送json格式的数据给服务器,服务器需要配置.json()对数据进行解析,中间件对JSON数据进行解析后,结果挂载在req的包里,后续路由就可以访问req包里面的数据
经测试,服务器端拿到了解析后的数据
8.5第三方的中间件
第三方开发出来的中间件,项目中按需下载并配置第三方中间件,提高项目开发效率
如body-的使用
运行npmbody-安装中间件导入中间件调用app.use()注册并使用中间件
使用代码如下:
//1.导入解析表单数据的中间件body-parserconst parser = require('body-parser')//通过express.json()这个中间件,解析表单数据app.use(parser.urlencoded({ extended: false }))app.post('/user', (req, res) => {//在服务器,使用req.body这个属性,来接受客户端发送过来的请求体数据//默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefinedconsole.log(req.body);res.send('ok')})
给服务器端发送数据
经过中间件处理后,服务器端成功接受到数据
内置的.中间件,就是基于body-这个第三方中间件进行封装的,因此用法很相似 。
8.6自定义中间件 定义中间件(使用app.use定义全局生效的中间件)监听req的data事件监听req的end事件(请求体数据接收完毕,自动触发req的end事件)使用模块解析请求数据体(Node.js内置这个模块,专门用来处理查询字符串,通过此模块提供的parse()函数查询字符串,解析成对象格式)讲解析出来的数据对象挂载为req.body(上游中间件和下游中间件以及路由之间,共享一份req和res,将解析出来的数据,挂载为req的自定义属性,命名为req.body)将自定义中间件封装为模块
自定义中间件模块化代码:
const express = require('express')const app = express()//导入node.js内置的querystring模块const qs = require('querystring')const bodyParser = (req, res, next) => {//定义中间件的具体业务逻辑//1.定义一个str字符串,专门用来存储客户端发送过来的请求体数据let str = ''//2.监听req的data事件req.on('data', (chunk) => {str += chunk})req.on('end', () => {//打印完整的请求体数据console.log(str);//把字符串格式的请求体数据,解析成对象格式const body = qs.parse(str)req.body = bodynext()})app.post('/user', (req, res) => {res.send('ok')})}module.exports = bodyParser
调用代码
const express = require('express')const app = express()//导入node.js内置的querystring模块const customBodyParser = require('./11.对自定义中间件进行模块化分装')app.use(customBodyParser)app.post('/user', (req, res) => {res.send(req.body)})app.listen(8080, () => {console.log('http://127.0.0.1:8080');})
四、使用写接口 1.编写GET接口
//在这里挂载对应的路由router.get('/get', (req, res) => {//通过req.query获取客户端通过查询字符串,发送到服务器的数据const query = req.query//调用send方法,向客户端响应处理的结果res.send({status: 0,//0表示处理成功,1表示处理失败msg: 'GET请求成功!',//状态描述data: query //需要响应给客户端的数据})})