前端开发

node中间件koa-bodyparser

2019-12-16  本文已影响0人  紫气楠楠

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')
})
上一篇 下一篇

猜你喜欢

热点阅读