http参数类型

  1. path
  2. query
  3. headers
  4. body

get query参数

url静态参数

ctx.query 获取参数,是一个对象

  1. www.baidu.com?id=1&name=2
  2. ctx.query 获取参数,是一个对象

url动态参数

ctx.params,参数是一个对象

  1. www.baidu.com/list/23

路由传参

  1. router.get('/list/:id', constroller.list.detail)

post 请求参数

ctx.request.body 获取 post 传参

  1. 'use strict';
  2. const { Controller } = require('egg');
  3. class AppController extends Controller {
  4. // class 里面的方法都是异步的
  5. async index() {
  6. const { ctx } = this;
  7. ctx.body = ctx.request.body;
  8. }
  9. }

egg-validate对参数验证

ctx.request.body

  1. 'use strict'
  2. const { Controller } = require('egg')
  3. class AppController extends Controller {
  4. async index() {
  5. const { ctx } = this
  6. const validateRule = {
  7. name: { type: 'string' },
  8. age: { type: 'number' },
  9. id: { type: 'number' }
  10. }
  11. ctx.validate(validateRule)
  12. ctx.body = ctx.request.body
  13. }
  14. }

plugins.js 配置插件

  1. // http参数验证
  2. exports.validate = {
  3. enable: true,
  4. package: 'egg-validate',
  5. };

put & patch & delete

put,全部更新

  • put 要求前端提供的一定是一个完整的资源对象
  • 缺的那些字段,应该被清空

patch,用来更新局部资源

  • 只传一个name到指定资源去,表示该请求是一个局部更新,后端仅更新接收到的字段。

路由

  1. //
  2. router.put('/user/:id', controller.user.edit);
  3. // 删除
  4. router.del('/user/:id', controller.user.del);

获取参数

  1. const { ctx } = this;
  2. ctx.request.body