@dudousxd/nestjs-filter (英语)
巢-过滤器的核心软件包——声明式,ORM-不可知式滤波类,用于雀巢JS.
提供 BaseFilter, (中文(简体) ), FilterRunner,装饰器(@Filterable, (中文(简体) ), @FilterFor, (中文(简体) ), @ApplyFilter, (中文(简体) ), FilterModule、例外处理和测试公用事业.
安装
pnpm add @dudousxd/nestjs-filter
您还需要一个 ORM 适配软件包 :
# MikroORM
pnpm add @dudousxd/nestjs-filter-mikro-orm
# TypeORM
pnpm add @dudousxd/nestjs-filter-typeorm
快速启动
import { Injectable } from '@nestjs/common';
import { Filterable, FilterFor, BaseFilter, FilterModule, ApplyFilter } from '@dudousxd/nestjs-filter';
// 1. Define a filter
@Injectable()
@Filterable({ entity: User })
class UserFilter extends BaseFilter<QueryBuilder> {
@FilterFor('name')
applyName(value: string) {
this.$query.andWhere({ name: value });
}
}
// 2. Register
@Module({
imports: [
FilterModule.forRoot({ inputNormalizer: 'camelCase' }),
FilterModule.forFeature([UserFilter]),
],
})
class AppModule {}
// 3. Use in controller
@Controller('users')
class UsersController {
@Get()
list(@ApplyFilter(UserFilter) qb: QueryBuilder) {
return qb.getResultList();
}
}
API 参考
装饰者
@Filterable({ entity, allowed?, blocked? })- 级装饰师。 将过滤器与实体联系起来.allowed白名单密钥;blocked黑名单 黑名单密钥被禁止完全过滤: 它在结构化发送中被跳过 财务报告和审定财务报表 放弃where列过滤器(匹配条款以警告方式被忽略,在任何深度,而不是拒绝)。 运行时间blacklistMethod(key)行为相同;whitelistMethod编号 :allowed允许发送访问和提供 没有 约束where。 。 。 .@FilterFor(inputKey?)——方法装饰. 绘制方法的输入键。 省略方法名的默认值.@ApplyFilter(FilterClass, options?)- 参数装饰器。 解析请求中的输入, 运行过滤器, 并注入 QueryBuilder。 选项 :source(单位:千美元)'auto'|'query'|'body'|Function, (中文(简体) ),dto, (中文(简体) ),resolve(动态过滤器选择).
类
BaseFilter<TQuery>- 抽象基础类。 提供$query, (中文(简体) ),$input, (中文(简体) ),$context, (中文(简体) ),$adapter通过 Async 本地服务器。 可选setup()钩.FilterRunner- 可注射服务.apply(FilterClass, input, qb, context?)程序上运行过滤器.FilterModule- 说吧forRoot(options?)登记全球基础设施.forFeature(filters)注册过滤类.
例外
FilterException- 抽象基础.FilterNotRegisteredException- 不在 DI 容器中的过滤类.FilterMissingEntityException失踪@Filterable({ entity })。 。 。 .FilterStateUnavailableException-- 访问$query外部FilterRunner.apply()。 。 。 .UnknownFilterKeyException-- 未知的密钥当onUnknownKey: 'throw'。 。 。 .FilterValidationException-- 类验证器验证失败 .FilterMethodException- 过滤方法(或setup())扔出一个错误.
例外过滤器
FilterExceptionFilter- 渔获FilterValidationException返回时{ statusCode: 400, message, errors }。 。 。 .
客户端消息(这个和跑者400s)通过
@nestjs/i18n 当应用程序将其注册时(可选的对等点,qq 0.0.3 < 1.0),作为
filter.* 密钥; 合并 @dudousxd/nestjs-filter/i18n/en.json 编号 : pt-BR.json 进入你的目录。 失踪
键用英语。 见"主计长指南" ("译文").
测试(从 @dudousxd/nestjs-filter/testing(中文(简体) )
FilterTestingModule- 说吧forRoot(options?)财务报告和审定财务报表forFeature(filters)默认为validation: 'off'。 。 。 .makeMockQueryBuilder<E>()- 基于代理的模拟QB,记录所有的通话. 通过qb.calls。 。 。 .
类型
FilterInput<F>-- 从过滤类中提取输入形状.FilterContext- 说吧{ req?, user?, raw? }。 。 。 .FilterModuleOptions- 说吧{ inputNormalizer?, dropId?, onUnknownKey?, validation? }。 。 。 .ApplyFilterOptions- 说吧{ source?, dto?, resolve? }。 。 。 .InputSource- 说吧'auto' | 'query' | 'body' | ((req) => Record<string, unknown>)。 。 。 .
配置
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
inputNormalizer | 'camelCase' | 'snakeCase' | fn | 'camelCase' | 将输入键规范化 . |
dropId | boolean | 明确设置 | 脱去线索 Id编号 :_id。有效的默认值目前在代码中不一致——当运行到 FilterRunner编号 :@ApplyFilter 后缀被剥去,除非你通过 dropId: false。 。 。 . |
onUnknownKey | 'ignore' | 'warn' | 'throw' | 'ignore' | 未确认的政策 结构化 filter 密钥 (无) @FilterFor,自动字段,关系,计算出字段或聚合路径). a 内未知列 where[] 条款受下列条款制约: throwOnInvalid 换句话说. |
throwOnInvalid | boolean | false | 何时 true,无效类型,不同字段,未知 where[] 列起a BadRequestException 而不是被丢弃 警告。 可超过每名 @Filterable。 。 。 . |
validation | 'auto' | 'off' | 'auto' | 安装时使用类验证器验证. |
见 根读取 用于完整文档.