@dudousxd/nestjs-filter-客户端
客户端查询构建器 @dudousxd/nestjs-filter。零依赖性,在浏览器和节点.js中运行.
安装
npm install @dudousxd/nestjs-filter-client
使用量
import { filterQuery } from '@dudousxd/nestjs-filter-client';
// Build a filter query
const query = filterQuery()
.where('name', 'contains', 'fleet')
.where('status', ['COMPLETED', 'FAILED'])
.where('age', 'gte', 18)
.build();
// → { where: [
// { field: 'name', operator: 'contains', value: 'fleet' },
// { field: 'status', operator: 'in', value: ['COMPLETED', 'FAILED'] },
// { field: 'age', operator: 'gte', value: 18 },
// ] }
方便方法
filterQuery()
.equals('status', 'active')
.contains('name', 'fleet')
.in('role', ['admin', 'editor'])
.between('age', 18, 65)
.gte('createdAt', '2026-01-01')
.isNull('deletedAt')
.set('page', 1)
.set('size', 25)
.build();
与OR/和
filterQuery()
.where('status', 'active')
.or(q => q
.where('name', 'contains', 'sync')
.where('email', 'contains', 'sync')
)
.build();
查询字符串输出
const qs = filterQuery()
.where('name', 'contains', 'fleet')
.where('status', ['COMPLETED', 'FAILED'])
.toQueryString();
// → "name[contains]=fleet&status[]=COMPLETED&status[]=FAILED"
使用获取
const qs = filterQuery()
.contains('name', 'fleet')
.gte('createdAt', '2026-01-01')
.set('page', 1)
.toQueryString();
const res = await fetch(`/api/users?${qs}`);
用作 POST 机体
const body = filterQuery()
.where('name', 'contains', 'fleet')
.or(q => q
.where('role', 'admin')
.where('role', 'editor')
)
.build();
const res = await fetch('/api/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
API 密码
| 方法 | 说明 |
|---|---|
where(field, value) | 等于过滤器( 阵列自动检测为 in(中文(简体) ) |
where(field, operator, value) | 带有明确运算符的过滤器 |
equals(field, value) | 等号的快手 |
contains(field, value) | 包含的快手 |
in(field, values) | 输入时的快手 |
between(field, low, high) | 介于两者之间的简称 |
gt 编号 : gte 编号 : lt 编号 : lte | 比较快手 |
isNull 编号 : isNotNull | 无法检查简称 |
isEmpty 编号 : isNotEmpty | 空检查快取 |
startsWith 编号 : endsWith | 字符串匹配的简称 |
or(callback) | OR组 |
and(callback) | 和组 |
set(key, value) | 添加额外的密钥( 如页面, 大小) |
build() | 回返 FilterQueryResult 对象 |
toQueryString() | 返回 URL 查询字符串 |
toFlatObject() | 返回自动字段的平面对象 |
类型
| 类型 | 这是什么 |
|---|---|
FilterQueryResult | 什麽 build() 返回: 整个信封, 包含 |
UnpagedFilterQuery | 同一个信封 无 paginate —— 说 FilterQueryResult 扩展它 |
ColumnFilter | 一个前提: field + 键 operator (+ 数) value(中文(简体) ) |
ColumnFilterGroup | 纯布尔组 : { OR: [...] } 编号 : { AND: [...] },没有字段,没有操作员 |
ColumnFilterClause | ColumnFilter | ColumnFilterGroup - 哪个条目 filter.where 也许 |
UnpagedFilterQuery —— 查询减去页面
导出将呼叫窗口交给服务器( CSV 导出, 报告), a
只计数请求、预选键或缓存密钥都想要显示的查询
哪个行 不用说 哪个切片这是 UnpagedFilterQuery数字 :
import type { UnpagedFilterQuery } from '@dudousxd/nestjs-filter-client';
function exportBody(query: UnpagedFilterQuery) {
return JSON.stringify(query); // the server decides how much it streams
}
const { paginate, ...unpaged } = filterQuery().contains('name', 'fleet').page(0, 25).build();
exportBody(unpaged);
执行 没有 访问范围 Omit<FilterQueryResult, 'paginate'> 换句话说. FilterQueryResult
携带 [key: string]: unknown 这样 set() 额外生存,和 Omit 重建类型
从 keyof 对于索引签名类型来说 string | number。奥米
因此崩溃 { [x: string]: unknown }: 每一个被命名的密钥都不见了, 每个类型
已接受,没有编译错误可告诉你. UnpagedFilterQuery 被宣布为
基础 FilterQueryResult 延伸,所以两者不能漂移.
ColumnFilterClause - 上游条款和仅属于集团的条款
条款要么是上游条款,要么是只构成其他条款的集团。 两者都是 在电线上有效(服务器的验证器有明显的组-节点分支),所以两者都 输入 :
import type { ColumnFilterClause } from '@dudousxd/nestjs-filter-client';
const where: ColumnFilterClause[] = [
{ field: 'status', operator: 'equals', value: 'active' }, // predicate
{ OR: [ // group — no field, no operator
{ field: 'name', operator: 'contains', value: 'sync' },
{ field: 'email', operator: 'contains', value: 'sync' },
] },
];
ColumnFilter 本身没有变化 需求 field 财务报告和审定财务报表 operator数字 :
团体是工会的单独成员,而不是放松,所以
{ field: 'status', value: 'active' } ——其操作员被遗忘的上游——
仍然是编译错误.
许可证
麻省理工学院