如何使用qs在Strapi中实现动态筛选(数组$in筛选报错)
解决Strapi结合qs使用$in数组筛选的问题
1. 修正类型定义
你当前类型里的[string]是单元素元组,而复选框多选会生成多元素数组,这会导致类型不匹配,需改成string[]:
export interface responseFilterType { type_product?: string[] user_type?: string[] weight?: string | number }
2. 调整qs序列化配置
Strapi的REST API要求数组参数以[$in][]格式传递,需给qs添加arrayFormat: 'brackets'配置,确保数组被正确序列化:
qs.stringify({ populate: "*", filters: { ...(value.type_product && { type_product: { $in: value.type_product, } }), ...(value.user_type && { user_type: { $in: value.user_type, } }), ...(value.weight && { weight: value.weight // 若需范围筛选可添加$gte/$lte等运算符 }) }, }, { encodeValuesOnly: true, arrayFormat: 'brackets' // 关键配置,保证数组序列化为Strapi可识别的格式 });
注:无需手动嵌套
$and数组,Strapi默认会将filters内的多个条件视为逻辑与关系。
3. 适配关联字段场景
如果type_product/user_type是关联字段(比如关联其他集合),需要针对关联对象的主键筛选:
type_product: { id: { $in: value.type_product // 传入关联对象的ID数组 } }
4. 验证Strapi端配置
- 确保
type_product和user_type字段在Strapi后台开启了可筛选选项(内容类型的字段设置中配置) - 若为枚举字段,确认传入的数组值与枚举选项完全匹配(大小写、拼写一致)
内容的提问来源于stack exchange,提问作者Frallen
相关产品推荐
相关产品推荐

