node.js:自定义中间件


表姐惊喜
扛不住我 2022-09-21 09:18:58 51594
分类专栏: 资讯

学完了中间件种类,我们来试试自己定义一个中间件,之前我们用中间件进行了req请求数据的解析,用的是第三方的模块中间件,今天我们自己来写一个解析数据的中间件;

1、思路:我们可以通过req.on来对客户端的数据进行监听,在我们自定义的中间件函数里面写:

  1. /1.1 创建自己的中间件函数并且挂载
  2. app.use((req,res,next)=>{
  3. //2.2 定义一个变量存储客户端字符串
  4. let str=''
  5. //2.1 对客户端请求数据的监听
  6. //2.3 进行客户端发送数据的监听
  7. //注意是对客户端对象进行监听,而不是服务器
  8. req.on('data',(chunk)=>{
  9. str+=chunk
  10. })
  11. //2.4 进行发送数据结束的监听
  12. req.on('end',()=>{
  13. //倘若有响应,说明数据发送结束,我们已经拿到所有数据
  14. -variable language_">console.log(str)
  15. })
  16. //2.5 不要忘记需要调用next函数
  17. next()
  18. })
  19. //3.1 编写路由对数据进行测试
  20. app.post('/user',(req,res)=>{
  21. })

我们自定义的变量用来接受客户端的请求数据,而且当我们监听到end的时候说明已经拿到了完整数据;

但是这一串数据我们看不懂:

 我们应该拿到下面的数据对象才对,这里用的是post请求,当然你们用get请求也可以;

 我们拿到了字符串之后,就可以导入内置的querystring模块的parse()方法来进行解析,然后将返回的对象挂为req.body就可以了;

2、获取数据字符串并且,进行数据的解析

  1. const express=require('express')
  2. const app=express()
  3. //4.1 导入内置模块
  4. const qs=require('querystring')
  5. //自定义解析客户端请求模块
  6. //1.1 创建自己的中间件函数并且挂载
  7. app.use((req,res,next)=>{
  8. //2.2 定义一个变量存储客户端字符串
  9. let str=''
  10. //2.1 对客户端请求数据的监听
  11. //2.3 进行客户端发送数据的监听
  12. //注意是对客户端对象进行监听,而不是服务器
  13. req.on('data',(chunk)=>{
  14. str+=chunk
  15. })
  16. //2.4 进行发送数据结束的监听
  17. req.on('end',()=>{
  18. //倘若有响应,说明数据发送结束,我们已经拿到所有数据
  19. -variable language_">console.log(str)
  20. //4.2 利用内置模块的parser()进行数据解析
  21. const body=qs.parse(str)
  22. //4.3 进行数据对象的挂载
  23. req.-property">body=body
  24. -variable language_">console.log(body)
  25. })
  26. //2.5 不要忘记需要调用next函数
  27. next()
  28. })
  29. //3.1 编写路由对数据进行测试
  30. app.post('/user',(req,res)=>{
  31. //5.1 拿到上游的挂载数据并显示
  32. -variable language_">console.log(req.-property">body)
  33. })
  34. app.listen(8080,()=>{
  35. -variable language_">console.log('express running at http://127.0.0.1:8080')
  36. })

 

 我们通过下面代码成功将数据解析完成,可以看到上面的看不懂的符号变成了下面的对象;

  1. const body=qs.parse(str)
  2. //4.3 进行数据对象的挂载
  3. req.body=body

3、那我们了解怎么写了之后,是不是又要实现一下模块化了,我们接下来就将自定义中间件变成一个模块,这样就更好用了:

  1. //1.1 导入内置模块
  2. const qs=require('querystring')
  3. //1.2 编写解析函数
  4. function myparse(req,res,next){
  5. //2.2 定义一个变量存储客户端字符串
  6. let str=''
  7. //2.1 对客户端请求数据的监听
  8. //2.3 进行客户端发送数据的监听
  9. //注意是对客户端对象进行监听,而不是服务器
  10. req.on('data',(chunk)=>{
  11. str+=chunk
  12. })
  13. //2.4 进行发送数据结束的监听
  14. req.on('end',()=>{
  15. //倘若有响应,说明数据发送结束,我们已经拿到所有数据
  16. -variable language_">console.log(str)
  17. //4.2 利用内置模块的parser()进行数据解析
  18. const body=qs.parse(str)
  19. //4.3 进行数据对象的挂载
  20. req.-property">body=body
  21. -variable language_">console.log(body)
  22. })
  23. //2.5 不要忘记需要调用next函数
  24. next()
  25. }
  26. //1.4 通过module.exports暴露
  27. -variable language_">module.-property">exports=myparse

我们自定义一个模块,将中间件函数放到模块里,别忘了导入内置模块querystring;然后通过module.exports将函数暴露出去,然后在服务器上导入自定义模块并挂在成全局中间件即可;

  1. //2.1 导入自定义解析模块
  2. const -variable constant_">myparse=require('./mybody-parse')
  3. //1.1 创建自己的中间件函数并且挂载
  4. app.use(myparse)

通过postman发送数据可以看到结果是一样的; 

 好了,自定义模块就这些,你们会了吗?

关注我,更多分享

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=8783
赞同 0
评论 0 条
扛不住我L0
粉丝 0 发表 10 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2966
【软件正版化】软件正版化工作要点  2885
统信UOS试玩黑神话:悟空  2855
信刻光盘安全隔离与信息交换系统  2743
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1277
grub引导程序无法找到指定设备和分区  1244
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  169
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  168
点击报名 | 京东2025校招进校行程预告  164
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  161
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!