node中间件koa-bodyparser

koa-bodyparser中间件

这个中间件可以将post请求的参数转为json格式返回

koa接收到的post请求参数并不是json格式,我们需要将其转换为json
使用方法:安装后直接在ctx.request.body内获取POST请求参数,中间件自动给我们解析为json
安装:
npm install --save koa-bodyparser

const Koa = require('koa');
const app = new Koa();
// 引入koa-bodyparser中间件,这个中间件可以将post请求的参数转为json格式返回
const bodyParser = require('koa-bodyparser');
// 使用中间件后,可以用ctx.request.body进行获取POST请求参数,中间件自动给我们解析为json
app.use(bodyParser());
// request.method可以获取请求方法。get,post或者其他类型(request对象被封在ctx内,所以也可以ctx.method获取)
app.use(async(ctx)=>{
    if (ctx.url === '/' &&ctx.method === 'POST'){
        let postdata = ctx.request.body
        ctx.body = postdata
    }else {
        // 其他请求显示404
        ctx.body = '<h1>404!</h1>'
    }
})


app.listen(3000,()=>{
    console.log('server starting at localhost:3000')
})

如果不用中间件来写,就需要我们自己拼接:

const Koa = require('koa');
const app = new Koa();
// request.method可以获取请求方法。get,post或者其他类型(request对象被封在ctx内,所以也可以ctx.method获取)
app.use(async(ctx)=>{
 if (ctx.url === '/' &&ctx.method === 'POST'){
        let postdata = await parsePostData(ctx)
        ctx.body = postdata
    }else {
        // 其他请求显示404
        ctx.body = '<h1>404!</h1>'
    }
})

// 将post请求参数拼接成一个字符串
function parsePostData(ctx){
    return new Promise((resolve,reject)=>{
        try{
            let postdata = ''
            // 请求流传送时触发
            ctx.req.on('data',(data)=>{
                postdata+=data
            })
            // 请求结束时触发
            ctx.req.addListener('end',()=>{
                let postData = parseQueryStr(postdata)
                return resolve(postData)
            })
        }catch(error){
            reject(error)
        } 
    })
}

// 字符串封装成JSON对象
function parseQueryStr(queryStr){
    let queryData = {}
    let queryList = queryStr.split('&')
    console.log(queryList)
    for ( let [index,item] of queryList.entries()){
        let itemlist = item.split('=')
        console.log(itemlist)
        // 向queryData对象内添加键值对
        // decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
        queryData[itemlist[0]] = decodeURIComponent(itemlist[1])
    }
    return queryData
}

app.listen(3000,()=>{
    console.log('server starting at localhost:3000')
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值