ReactJS调用FeathersJS find接口报"invalid query parameter"错误问题
问题根因
你遇到的报错是Feathers框架内置的查询参数校验机制导致的:框架默认会拦截所有带$前缀的非内置查询操作符,$show、$values都不属于Feathers原生支持的查询操作符,因此会直接返回参数无效的错误。
解决方法
- 方案1:避免自定义参数用
$前缀
如果你没有特殊的操作符定义需求,直接把参数改成非$开头即可,比如把$show改成show、$noshow改成noshow,这类参数不会被Feathers的默认校验拦截,服务端可以直接在钩子(hook)中获取参数做业务处理,修改后的请求代码如下:data = {noshow:true, show:true} ; let res = await client.service('servv').find({query:data}); - 方案2:服务端添加自定义操作符白名单
如果你确实需要保留$前缀作为自定义操作符,需要在服务端对应servv服务的配置中把自定义参数加入允许列表:- Feathers v4 版本:在服务初始化的配置中添加
whitelist字段app.use('servv', createService({ // 其他原有配置 whitelist: ['$show', '$noshow', '$values'] })) - Feathers v5 版本:在服务的查询Schema中添加对应字段的允许声明,或者在参数校验器中添加允许字段
- Feathers v4 版本:在服务初始化的配置中添加
- 额外注意:如果用方案2添加了白名单,还需要自己在服务端钩子中编写对应参数的处理逻辑,不然参数不会自动生效,只是不会再抛出无效参数的错误。
内容的提问来源于stack exchange,提问作者TylerKenFleck
相关产品推荐
相关产品推荐

