koa2 接收post參數


koa2接收Post參數由於沒有在上下文對象上解析,所以需要用node 原生req解析。
獲取到的參數,要注意轉碼問題。

const Koa = require('koa');

const app = new Koa();
app.use(async(ctx)=>{
    if(ctx.url === '/' && ctx.method === 'GET'){
        //顯示表單頁面
        let html = `
            <h1> KOA2 request post</h1>
            <form method='post' action='/'>
                <p>username:  <input name="username"/></p>
                <p>age:  <input name="age"/></p>
                <p>website:  <input name="website"/></p>
                <input type="submit" />
            </form>
        `;
        ctx.body = html;
    }else if(ctx.url === '/' && ctx.method === 'POST'){
       let postData = await parsePostData(ctx);
       let result = parseQueryStr(postData)
        ctx.body =  result;
    }else{
        ctx.body = '<h1>404!</h1>'
    }
});

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

function parseQueryStr(queryStr){
    let queryData = {};
    let queryList = queryStr.split('&');
    console.log(queryList.entries())
    for(let [index,queryStr] of queryList.entries()){
        let itemArr = queryStr.split("=");
        queryData[itemArr[0]] = decodeURIComponent(itemArr[1]); //轉碼
    }
    return queryData;
}

app.listen(3000,()=>{
    console.log("app starting ...")
});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM