FeathersJS报Invalid query parameter $dis错误如何解决?
问题根因
FeathersJS 后端默认会拦截所有以$开头的查询参数,只有框架内置支持、或开发者手动配置到白名单中的参数才会被放行。你提到的$includeEc没有触发报错,是因为原有代码已经将该参数加入了服务的允许参数列表,而$dis未被加入所以触发了非法参数校验。
解决方案
仅需要在后端servicerequest服务的配置中添加$dis到参数白名单即可,无需修改现有前端请求逻辑:
- 找到后端
servicerequest服务的注册代码,在参数白名单配置中新增$dis,示例如下:
// Feathers v4/v5 服务注册示例 app.use('servicerequest', createService({ // 原有服务配置项 whitelist: ['$includeEc', '$dis'] // 原有已包含$includeEc,追加$dis即可 }))
- 如果你使用了Feathers自带的Schema校验(TypeBox/Joi 定义查询参数规则),还需要在查询参数Schema中添加
$dis的类型定义:
// 示例为TypeBox定义的查询Schema const servicerequestQuerySchema = Type.Object({ // 原有其他查询参数定义 $include: Type.Optional(Type.Boolean()), $includeEc: Type.Optional(Type.Boolean()), $limit: Type.Optional(Type.Number()), $dis: Type.Optional(Type.Number()) // 新增该行定义$dis参数 }, { additionalProperties: false })
- 若项目使用自定义钩子过滤查询参数,找到对应过滤逻辑,不要删除
$dis参数即可。
配置完成后前端原有请求逻辑无需变动,$dis参数可以正常传递到后端供校验逻辑使用,也不会再触发无效查询参数报错。
内容的提问来源于stack exchange,提问作者TylerKenFleck
相关产品推荐
相关产品推荐

