美文网首页
五.Koa2基础教程04POST请求接收2

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

作者: qqqc | 来源:发表于2018-02-13 14:44 被阅读0次

    解析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=`
                <h1>JSPang Koa2 request POST</h1>
                <form method="POST" action="/">
                    <p>userName</p>
                    <input name="userName" /><br/>
                    <p>age</p>
                    <input name="age" /><br/>
                    <p>website</p>
                    <input name="webSite" /><br/>
                    <button type="submit">submit</button>
                </form>
            `;
            ctx.body=html;
        }else if(ctx.url==='/' && ctx.method==='POST'){
            let pastData=await parsePostData(ctx);
             ctx.body=pastData;
        }else{
            ctx.body='<h1>404!</h1>';
        }
     
    });
     
    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

          本文链接:https://www.haomeiwen.com/subject/hssjtftx.html