跳到主要内容

helper - 数据转换与验证

依赖模块

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

配置项

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

PageOption

配置项类型默认值功能
defaultLimitnumber20默认限制条数
maxLimitnumber100最大条数
minLimitnumber1最小条数
allowOrderstring[]允许排序的字段
defaultOrderstring \| 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;
}
}