koa2-5
Posted 小凡的耿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了koa2-5相关的知识,希望对你有一定的参考价值。
POST请求如何接收(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=` <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-5的主要内容,如果未能解决你的问题,请参考以下文章