获取get、post参数

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

控制器中获取参数

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

get([name, value])

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

获取或构造querystring参数。

  1. //获取参数
  2. let test = this.get('test') || '';
  3. //构造参数
  4. this.get('test', {aa: 1});

post([name, value])

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

获取或构造post参数。

  1. //获取参数
  2. let test = this.post('test') || '';
  3. //构造参数
  4. this.post('test', {aa: 1});

param([name])

  • name 参数名,如果值为undefined则返回所有querystring以及post参数
  1. querystring中同名key会被post值覆盖

获取参数,先从post参数中查找,如果不存在则从querstring中查找。

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

file([name, value])

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

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

  1. //获取参数
  2. let test = this.file('filename') || {};
  3. //构造参数
  4. this.file('test.txt', {...});

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

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

ctx.querys([name, value])

ThinkKoa扩展 think_payload中间件

获取或构造querystring的值。

  1. //获取所有querystring值
  2. ctx.querys();
  3. //获取某个querystring值
  4. ctx.querys('username');
  5. //构造querystring 值
  6. ctx.querys('username', 'lin');
  7. ctx.querys({
  8. username: 'lin',
  9. age: 22
  10. })

ctx.post([name, value])

ThinkKoa扩展 think_payload中间件

获取或构造post传递的值。

  1. //获取所有post传递的值
  2. ctx.post();
  3. //获取某个post传递的值
  4. ctx.post('username');
  5. //构造post传递的值
  6. ctx.post('username', 'lin');
  7. ctx.post({
  8. username: 'lin',
  9. age: 22
  10. })

ctx.param([name])

ThinkKoa扩展 think_payload中间件

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

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

ctx.file([name])

ThinkKoa扩展 think_payload中间件

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

  1. //获取所有传递的文件
  2. ctx.file();
  3. //获取某个传递的文件
  4. ctx.file('filename');
  5. //构造传递的文件
  6. ctx.file('filename', fileObject);

特别注意

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

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

  1. //一个是函数,一个是属性。但值相等
  2. ctx.querys() == ctx.query
  3. ctx.querys() // thinkkoa扩展函数
  4. ctx.query //koa原生属性