Koa2 请求数据获取

GET请求数据获取

koa中,获取GET请求数据是从koaequest对象中的query方法或querystring方法,query返回是格式化好的参数对象,querystring返回的是请求字符串,因为ctxrequestAPI有直接引用的方式,所以获取GET请求数据有两个方法。

  • 1.从上下文中直接获取
    • 请求对象ctx.query,返回结果如 { a:1, b:2 }
    • 请求字符串 ctx.querystring,返回结果如 a=1&b=2
  • 2.从上下文的request对象中获取
    • 请求对象ctx.request.query,返回结果如 { a:1, b:2 }
    • 请求字符串 ctx.request.querystring,返回结果如a=1&b=2

示例代码

// index.js

const Koa = require("koa");
const app = new Koa();

app.use(async (ctx) => {
  let url = ctx.url;
  // 从上下文的request对象中获取
  let request = ctx.request;
  let req_query = request.query;
  let req_querystring = 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);

执行程序

执行node index.js 然后访问 http://localhost:3000/page/user?a=1&b=2 页面会出现以下结果

image-20201022110128596

koa-bodyparser中间件

对于POST的请求,koa-bodyparser中间件可以把koa2上下文的formData数据解析到ctx.request.body中

安装koa-bodyparser

npm i koa-bodyparser

示例代码

const Koa = require("koa");
const app = new Koa();
const bodyParser = require("koa-bodyparser");

// 使用ctx.body解析中间件
app.use(bodyParser());

app.use(async (ctx) => {
  if (ctx.url === "/" && ctx.method === "GET") {
    // 当GET请求时候返回表单页面
    let html = `
      <h1>demo</h1>
      <form method="POST" action="/">
        <p>用户名</p>
        <input name="userName" /><br/>
        <p>昵称</p>
        <input name="nickName" /><br/>
        <p>邮箱</p>
        <input name="email" /><br/>
        <button type="submit">提交</button>
      </form>
    `;
    ctx.body = html;
  } else if (ctx.url === "/" && ctx.method === "POST") {
    // 当POST请求的时候,中间件koa-bodyparser解析POST表单里的数据,并显示出来
    let postData = ctx.request.body;
    ctx.body = postData;
  } else {
    // 其他请求显示404
    ctx.body = "<h1>404!!!/(ㄒoㄒ)/~~</h1>";
  }
});

app.listen(3000);

执行程序

执行node index.js 然后访问 http://localhost:3000/

image-20201022112216854

提交表单触发POST请求

image-20201022112253981


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!