@dudousxd/nestjs-filter

中文文档
2.1.0发布于 2026/11/13MITTypeScriptES Module零依赖构建来源已验证近 30 天下载 4052

NestJS过滤库——核心抽象,跑道,装饰.

中文使用文档
文档目录10 节
  1. 安装
  2. 快速启动
  3. API 参考
  4. 装饰者
  5. 类
  6. 例外
  7. 例外过滤器
  8. 测试(从 @dudousxd/nestjs-filter/testing (中文(简体) )
  9. 类型
  10. 配置

@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'将输入键规范化 .
dropIdboolean明确设置脱去线索 Id编号 :_id。有效的默认值目前在代码中不一致——当运行到 FilterRunner编号 :@ApplyFilter 后缀被剥去,除非你通过 dropId: false。 。 。 .
onUnknownKey'ignore' | 'warn' | 'throw''ignore'未确认的政策 结构化 filter 密钥 (无) @FilterFor,自动字段,关系,计算出字段或聚合路径). a 内未知列 where[] 条款受下列条款制约: throwOnInvalid 换句话说.
throwOnInvalidbooleanfalse何时 true,无效类型,不同字段,未知 where[] 列起a BadRequestException 而不是被丢弃 警告。 可超过每名 @Filterable。 。 。 .
validation'auto' | 'off''auto'安装时使用类验证器验证.

见 根读取 用于完整文档.

版本与发布记录

@dudousxd/nestjs-filter 共发布 52 个版本,首次发布于 2026/05/25;过去 12 个月发布了 52 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
2.1.0latest2026/11/13今天
2.0.12026/11/121 天前
1.37.12026/11/094 天前
1.37.02026/11/085 天前
1.36.02026/11/0211 天前
2.0.02026/11/0111 天前

关于 @dudousxd/nestjs-filter 的常见问题

@dudousxd/nestjs-filter 是什么?

NestJS过滤库——核心抽象,跑道,装饰.

如何安装 @dudousxd/nestjs-filter?

在项目目录运行 npm install @dudousxd/nestjs-filter,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:rxjs(>=7.0.0)、@nestjs/core(>=10.0.0)、@nestjs/common(>=10.0.0)、reflect-metadata(>=0.1.13)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 nestjs-filter,可以用 npx nestjs-filter 直接运行。

@dudousxd/nestjs-filter 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@dudousxd/nestjs-filter 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@dudousxd/nestjs-filter 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@dudousxd/nestjs-filter 可以商用吗?

@dudousxd/nestjs-filter 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@dudousxd/nestjs-filter 的下载量有多少?

根据 npm 官方下载统计,@dudousxd/nestjs-filter 在 2026/10/13 – 2026/11/11 这 30 天内被下载 4,052 次,日均约 135 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@dudousxd/nestjs-filter 还在维护吗?

最新版本 2.1.0 发布于 2026/11/13(今天);至今共发布 52 个版本,其中过去 12 个月发布了 52 个;首次发布于 2026/05/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。