如何修改GraphQL查询实现名称包含匹配(无需修改服务端)
无法仅通过客户端修改查询实现包含匹配(除非服务端有隐藏支持)
GraphQL的查询能力完全由服务端定义的Schema决定,客户端只能使用服务端暴露的字段和参数。如果服务端的user查询仅支持精确匹配的name参数,不修改服务端的前提下,你没办法直接通过修改查询实现包含匹配,只能通过以下两种方式变通:
1. 检查服务端是否支持模糊匹配参数
很多GraphQL服务(比如基于Prisma、Hasura构建的)会自动生成支持模糊匹配的参数,比如name_contains、name_like,同时返回多个结果的字段通常是复数形式(比如users而非user)。如果服务端有这类参数,你可以修改查询如下:
query getUsersByNameContains($name: String!) { users(name_contains: $name) { id name email } }
然后将变量$name设为"Jon"即可获取所有名称包含“Jon”的用户。
2. 客户端本地过滤
如果服务端没有提供任何模糊匹配的参数,你只能先查询所有用户,再在客户端代码里过滤出符合条件的结果:
首先修改查询获取全部用户:
query getAllUsers { users { id name email } }
然后在客户端代码中过滤(以JavaScript为例):
// 假设allUsers是查询返回的所有用户数组 const filteredUsers = allUsers.filter(user => user.name.includes('Jon'));
内容的提问来源于stack exchange,提问作者Polo1990
相关产品推荐
相关产品推荐

