五.Koa2基础教程04POST请求接收2

解析Node原生POST参数
我们先声明一个方法,然后用Promise对象进行解析。这里我们使用了ctx.req.on来接收事件。难点是我们这里用了ES6的Promise来处理。

function parsePostData(ctx){
    return new Promise((resolve,reject)=>{
        try{
            let postdata="";
            ctx.req.on('data',(data)=>{
                postdata += data
            })
            ctx.req.addListener("end",function(){
              
                resolve(postdata);
            })
        }catch(error){
            reject(error);
        }
    });
}

然后在上节课接收POST请求的处理方法里,修改代码如下。

let pastData=await parsePostData(ctx);
 ctx.body=pastData;

POST字符串解析JSON对象
现在成功输出了POST得字符串,但这样使用起来很不方便,一般我们都喜欢把字符串封装成JSON对象,然后在程序里使用。下面我们把写一个字符串封装JSON兑现对象的方法。

function parseQueryStr(queryStr){
    let queryData={};
    let queryStrList = queryStr.split('&');
    console.log(queryStrList);
    for( let [index,queryStr] of queryStrList.entries() ){
        let itemList = queryStr.split('=');
        console.log(itemList);
        queryData[itemList[0]] = decodeURIComponent(itemList[1]);
    } 
    return queryData
}

给出全部代码,供小伙伴们练习使用。

const Koa  = require('koa');
const app = new Koa();
app.use(async(ctx)=>{
    if(ctx.url==='/' && ctx.method==='GET'){
        //显示表单页面
        let html=`
            

JSPang Koa2 request POST

userName


age


website


`; ctx.body=html; }else if(ctx.url==='/' && ctx.method==='POST'){ let pastData=await parsePostData(ctx); ctx.body=pastData; }else{ ctx.body='

404!

'; } }); function parsePostData(ctx){ return new Promise((resolve,reject)=>{ try{ let postdata=""; ctx.req.on('data',(data)=>{ postdata += data }) ctx.req.addListener("end",function(){ let parseData = parseQueryStr( postdata ) resolve(parseData); }) }catch(error){ reject(error); } }); } function parseQueryStr(queryStr){ let queryData={}; let queryStrList = queryStr.split('&'); console.log(queryStrList); for( let [index,queryStr] of queryStrList.entries() ){ let itemList = queryStr.split('='); console.log(itemList); queryData[itemList[0]] = decodeURIComponent(itemList[1]); } return queryData } app.listen(3000,()=>{ console.log('[demo] server is starting at port 3000'); });

你可能感兴趣的:(五.Koa2基础教程04POST请求接收2)