@zenweb/helper
TypeScript icon, indicating that this package has built-in type declarations

4.1.10 • Public • Published

helper - 数据转换与验证

依赖模块

  • @zenweb/inject
  • @zenweb/result
  • @zenweb/messagecode

配置项

配置项 类型 默认值 功能
page PageOption 详见 PageOption 配置默认的分页参数

PageOption

配置项 类型 默认值 功能
defaultLimit number 20 默认限制条数
maxLimit number 100 最大条数
minLimit number 1 最小条数
allowOrder string[] 允许排序的字段
defaultOrder string | string[] 默认排序字段

可注入对象

  • request
    • TypeCastHelper
    • QueryHelper
    • ParamHelper

全局模式

方法 功能
helperBase(target: Class) 生成一个基于 HelperBase 类的快捷方式对象
$query 取得请求地址中 query 参数值
$param 取得请求地址中路径参数值

功能说明

QueryHelper

  • get: ctx.query 的参数转换
  • page: ctx.query 分页参数的检查并处理

ParamHelper

  • get: router 模块 ctx.params 的参数转换
  • page: ctx.params 分页参数的检查并处理

TypeCastHelper

  • pick: 从输入数据中挑选数据转换&验证
  • page: 分页参数的检查并处理

本模块使用 typecasts 包进行数据转换与校验 TypeCastPickOption 参数的详细说明请前往 typecasts 查看

使用样例

import { mapping, QueryHelper } from 'zenweb';

export class TestController {
  /**
   * 例如客户端提交的查询参数为:
   * a=1&b=hello&c=1,2,3&d=yes&e=a|b|c
   */
  @mapping()
  test(query: QueryHelper) {
    const data = query.get({
      a: '!int', // 转换为整数类型, “!”感叹号开头代表此参数必须并且不能为null
      b: 'trim', // 去除字符串两端空字符
      c: 'int[]', // 转换为整形列表
      d: 'bool', // 转换为布尔
      e: {
        // 可以设置更多转换选项
        type: 'string', // 数组元素类型为字符串
        splitter: '|',  // 数组切割字符串
        minItems: 3,    // 最多允许出现几个元素
        // 可以设置数据验证规则
        validate: {
          regexp: /\w+/i,
          // 更多验证规则详见文档
        },
      },
      // 对象嵌套
      objname: {
        type: {
          id: '!int',
          name: 'string',
        }
      },
    });
    /*
      输出结果:
      {
        a: 1,
        b: "hello",
        c: [1, 2, 3],
        d: true,
        e: ["a", "b", "c"]
      }
    */
    return data;
  }

  /**
   * 分页处理
   * limit=10&offset=5&order=-id
   */
  @mapping()
  page(query: QueryHelper) {
    const data = query.page({
      // 以下都为可选参数
      input: ctx.query,     // 输入数据源,默认使用 ctx.query
      defaultLimit: 20,     // 默认条数限制,默认 20
      maxLimit: 100,        // 最大限制条数,默认 100
      minLimit: 1,          // 最少限制条数,默认 1
      maxOrder: 1,          // 允许同时排序的字段数量,默认取 allowOrder 的长度
      defaultOrder: '-id',  // 默认排序字段,在客户端没有提供指定参数时的默认值
      allowOrder: ['id'],   // 允许排序的字段名称,注意不要加上 -前缀
    });
    /*
    输出结果:
    {
      limit: 10,
      offset: 5,
      order: ["-id"]
    }
    */
    return data;
  }
}

Package Sidebar

Install

npm i @zenweb/helper

Weekly Downloads

29

Version

4.1.10

License

MIT

Unpacked Size

23.3 kB

Total Files

11

Last publish

Collaborators

  • yefei777