node.js:<7>自定义中间件

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

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

/1.1 创建自己的中间件函数并且挂载
app.use((req,res,next)=>{

    //2.2 定义一个变量存储客户端字符串
    let str=''

    //2.1 对客户端请求数据的监听
    //2.3 进行客户端发送数据的监听
    //注意是对客户端对象进行监听,而不是服务器
    req.on('data',(chunk)=>{
        str+=chunk
    })

    //2.4 进行发送数据结束的监听
    req.on('end',()=>{
        //倘若有响应,说明数据发送结束,我们已经拿到所有数据
        console.log(str)
        
    })

    //2.5 不要忘记需要调用next函数
    next()
})

//3.1 编写路由对数据进行测试
app.post('/user',(req,res)=>{

})

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

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

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

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

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

const express=require('express')
const app=express()

//4.1 导入内置模块
const qs=require('querystring')

//自定义解析客户端请求模块

//1.1 创建自己的中间件函数并且挂载
app.use((req,res,next)=>{

    //2.2 定义一个变量存储客户端字符串
    let str=''

    //2.1 对客户端请求数据的监听
    //2.3 进行客户端发送数据的监听
    //注意是对客户端对象进行监听,而不是服务器
    req.on('data',(chunk)=>{
        str+=chunk
    })

    //2.4 进行发送数据结束的监听
    req.on('end',()=>{
        //倘若有响应,说明数据发送结束,我们已经拿到所有数据
        console.log(str)
        //4.2 利用内置模块的parser()进行数据解析
        const body=qs.parse(str)
        //4.3 进行数据对象的挂载
        req.body=body
        console.log(body)
    })

    //2.5 不要忘记需要调用next函数
    next()
})

//3.1 编写路由对数据进行测试
app.post('/user',(req,res)=>{

    //5.1 拿到上游的挂载数据并显示
    console.log(req.body)
})
                    
app.listen(8080,()=>{
     console.log('express running at http://127.0.0.1:8080')
})

 

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

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

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

//1.1 导入内置模块
const qs=require('querystring')

//1.2 编写解析函数
function myparse(req,res,next){

    //2.2 定义一个变量存储客户端字符串
    let str=''

    //2.1 对客户端请求数据的监听
    //2.3 进行客户端发送数据的监听
    //注意是对客户端对象进行监听,而不是服务器
    req.on('data',(chunk)=>{
        str+=chunk
    })

    //2.4 进行发送数据结束的监听
    req.on('end',()=>{
        //倘若有响应,说明数据发送结束,我们已经拿到所有数据
        console.log(str)
        //4.2 利用内置模块的parser()进行数据解析
        const body=qs.parse(str)
        //4.3 进行数据对象的挂载
        req.body=body
        console.log(body)
    })

    //2.5 不要忘记需要调用next函数
    next()
}

//1.4 通过module.exports暴露
module.exports=myparse

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


//2.1 导入自定义解析模块
const myparse=require('./mybody-parse')

//1.1 创建自己的中间件函数并且挂载
app.use(myparse)

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

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

关注我,更多分享

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程学渣ズ

谢谢老板

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值