获取get、post参数

在WEB开发中,最为常见的就是获取querystring、form等传递的参数。koa提供了query、body等相关的功能来获取,但面对multi-form等场景,往往需要引入第三方中间件才能处理。ThinkKoa在此基础上封装了几个函数,使用非常方便。

控制器中获取参数

控制器中提供了 this.getthis.postthis.paramthis.file来获取各种参数数据:

get([name, value])

  • name 参数名,如果值为undefined则返回所有querystring参数
  • value 参数值

获取或构造querystring参数。

//获取参数
let test = this.get('test') || '';

//构造参数
this.get('test', {aa: 1});

post([name, value])

  • name 参数名,如果值为undefined则返回所有post参数
  • value 参数值

获取或构造post参数。

//获取参数
let test = this.post('test') || '';

//构造参数
this.post('test', {aa: 1});

param([name])

  • name 参数名,如果值为undefined则返回所有querystring以及post参数
      querystring中同名key会被post值覆盖
    
    获取参数,先从post参数中查找,如果不存在则从querstring中查找。
let all = this.param();

let info = this.param('info') || {};

file([name, value])

  • name 文件名,如果值为undefined则返回所有file对象
  • value 参数值

获取或构造上传的file对象。

//获取参数
let test = this.file('filename') || {};

//构造参数
this.file('test.txt', {...});

中间件或其他类中获取参数

在中间件中,ThinkKoa在ctx对象上面扩展了 ctx.querysctx.postctx.paramctx.file,配合ctx原生的ctx.queryctx.body可以非常方便的获取参数。

ctx.querys([name, value])

ThinkKoa扩展 think_payload中间件

获取或构造querystring的值。

//获取所有querystring值
ctx.querys();

//获取某个querystring值
ctx.querys('username');

//构造querystring 值
ctx.querys('username', 'lin');
ctx.querys({
    username: 'lin',
    age: 22
})

ctx.post([name, value])

ThinkKoa扩展 think_payload中间件

获取或构造post传递的值。

//获取所有post传递的值
ctx.post();

//获取某个post传递的值
ctx.post('username');

//构造post传递的值
ctx.post('username', 'lin');
ctx.post({
    username: 'lin',
    age: 22
})

ctx.param([name])

ThinkKoa扩展 think_payload中间件

获取querystring或者post传递的值,其中同名的键post会覆盖querystring中的值。

//获取所有querystring和post传递的值
ctx.param();

//获取某个post传递的值,如果post中不存在,则查找querystring
ctx.param('username');

ctx.file([name])

ThinkKoa扩展 think_payload中间件

获取或构造form-data传递的文件。

//获取所有传递的文件
ctx.file();

//获取某个传递的文件
ctx.file('filename');

//构造传递的文件
ctx.file('filename', fileObject);

特别注意

  • ctx.get为获取header内容,并非获取querystring参数

  • ctx.querys 和 ctx.query的区别:

//一个是函数,一个是属性。但值相等
ctx.querys() == ctx.query

ctx.querys() // thinkkoa扩展函数
ctx.query //koa原生属性