koa 请求参数接收

前言

web 请求都类似,非常容易理解,不详细说明

注意: ctx.request 和 node request 不等同

get 请求

    /**
 * Description 获取get 请求参数
 * @authors fanjiongrong (fanjiongrong@tvflnet.com)
 * @date    2018-11-15 11:27:06
 * @version 1.0.0
 */

 const Koa=require('koa');

 const app=new Koa();

 app.use(async (ctx) =>{
     //从request 对象取
     let url=ctx.url;
     console.log(ctx.request);
     let request=ctx.request;
     let req_query=ctx.request.query;
     let req_querystring=ctx.request.querystring;

     //从上下文中取
     let ctx_query=ctx.query;
     let ctx_querystring=ctx.querystring;

     ctx.body={
         url,
         req_query,
         req_querystring,
         ctx_query,
         ctx_querystring
     }
 })


 app.listen(3000);

 console.log('[demo] is starting at port 3000');
 console.log('http://localhost:3000');

post 请求

1 ctx.request 是 context 经过封装的对象, ct.req 是 node.js 请求对象。 2 ctx.response ctx.res 同理 3 由于 koa 本身没有封装获取 post 请求参数的代码,不借助第三方中间件,代码和 node.js 原生 post 请求一致

  /**
* Description 解析node 请求的post 参数
* @authors fanjiongrong (fanjiongrong@tvflnet.com)
* @date    2018-11-15 17:38:30
* @version 1.0.0
*/
async function parsePostData(ctx) {
return new Promise((resolve, reject) => {
  try {
    let postData = '';
    // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
    ctx.req.addListener('data', data => {
      postData += data;
      console.log(postData);
    });
    //结束后真正解析
    ctx.req.addListener('end', () => {
      let parsePostData = parseQueryStr(postData);
      resolve(parsePostData);
    });
  } catch (err) {
    reject(err);
  }
});
}

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

module.exports=parsePostData;

借助中间件实现post 请求参数解析

/**
 * Description 使用中间件获取post 请求参数 koa-bodyparser 
 * @authors fanjiongrong (fanjiongrong@tvflnet.com)
 * @date    2018-11-15 18:38:58
 * @version 1.0.0
 */

const Koa = require('koa');
const bodyparser=require('koa-bodyparser');


const app = new Koa();

app.use(bodyparser());

app.use(async ctx => {
  if (ctx.url === '/' && ctx.method === 'GET') {
    // 当GET请求时候返回表单页面
    let html = `
          <h1>koa2 request post demo</h1>
          <form method="POST" action="/">
            <p>userName</p>
            <input name="userName" /><br/>
            <p>nickName</p>
            <input name="nickName" /><br/>
            <p>email</p>
            <input name="email" /><br/>
            <button type="submit">submit</button>
          </form>
        `;
    ctx.body = html;
  } else if (ctx.url === '/' && ctx.method === 'POST') {
    // 当POST请求的时候,解析POST表单里的数据,并显示出来
    let postData = ctx.request.body;
    ctx.body = postData;
  } else {
    // 其他请求显示404
    ctx.body = '<h1>404!!! o(╯□╰)o</h1>';
  }
});

app.listen(3000, () => {
  console.log('[demo] is starting at port 3000');
  console.log('http://localhost:3000');
});


上次更新: 2019-8-13 17:41:58