首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

graphql get查询显示此错误“标量中不允许变量”

问题分析

GraphQL中的get查询出现“标量中不允许变量”的错误,通常是因为在标量字段中使用了变量,而GraphQL不允许在标量字段中直接使用变量。

基础概念

  • GraphQL: 是一种用于API的查询语言,允许客户端请求所需的数据结构。
  • 标量: GraphQL中的基本数据类型,如String、Int、Float、Boolean和ID。
  • 变量: 在GraphQL查询中使用变量可以提高查询的灵活性和可重用性。

错误原因

GraphQL不允许在标量字段中直接使用变量。例如,以下查询会引发该错误:

代码语言:txt
复制
query GetUser($id: ID!) {
  user(id: $id) {
    name
    age
    isActive # 这里使用了变量,但isActive是标量字段
  }
}

解决方法

  1. 检查查询语法: 确保在标量字段中没有使用变量。
  2. 使用输入类型: 如果需要在标量字段中使用变量,可以考虑使用输入类型。

示例代码

假设我们有一个用户查询,其中包含一个布尔类型的字段isActive,我们可以使用输入类型来解决这个问题。

代码语言:txt
复制
# 定义输入类型
input UserInput {
  id: ID!
  isActive: Boolean
}

# 查询
query GetUser($input: UserInput!) {
  user(input: $input) {
    name
    age
    isActive
  }
}

然后在客户端传递变量时:

代码语言:txt
复制
{
  "input": {
    "id": "123",
    "isActive": true
  }
}

应用场景

这种错误常见于需要动态设置标量字段值的场景,例如根据用户输入来过滤数据。

参考链接

通过以上方法,可以有效解决“标量中不允许变量”的错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

GraphQL 基础实践

变量定义:在 GraphQL ,声明一个变量使用符号开头,冒号后面紧跟着变量的传入类型。如果要使用变量,直接引用即可,例如上面的 movie 就可以改写成 movie(name: name)。...在 GraphQL ,只有一个 API 端点,同样也接受 GET 和 POST 动词,如要操作 mutation 则使用 POST 请求。...如果感叹号跟在 field 的后面,则表示返回该 type 的数据时,字段一定不为空。 通过上面的类型定义,可以看到 GraphQL 的类型系统起到了很重要的角色。...在本例,Schema 定义了 name 为 String类型,那么你就不能传 Int类型进去,此时会抛出类型不符的错误。...字段得到的是一组 id,不符合 Schema 的定义,此时 GraphQL 会抛出错误

12.8K20

GraphQL 从入门到实践

对象类型:用户在 schema 定义的 type 标量类型:GraphQL 内置有一些标量类型 String、Int、Float、Boolean、ID,用户也可以定义自己的标量类型 比如在 Schema...它定义了字段的类型、数据的结构,描述了接口数据请求的规则,当我们进行一些错误查询的时候 GraphQL 引擎会负责告诉我们哪里有问题,和详细的错误信息,对开发调试十分友好。...2.5 请求格式 GraphQL 最常见的是通过 HTTP 来发送请求,那么如何通过 HTTP 来进行 GraphQL 通信呢 举个栗子,如何通过 Get/Post 方式来执行下面的 GraphQL 查询呢...# Get 方式 http://myapi/graphql?...---- 网上的帖子大多深浅不一,甚至有些前后矛盾,在下的文章都是学习过程的总结,如果发现错误,欢迎留言指出~ 参考: GraphQL | 一种为你的 API 而生的查询语言 JSON-RPC

2.5K31
  • GraphQL详解

    「做减法:」 产品需求减少,页面需要减少功能,或者减少某些信息显示,那么数据就要做减法。 一种通常懒惰的做法是,前端不与后端沟通,仅在前端对数据选择性显示。...GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器获取数据,这些数据存储可能存储在数据库,API的职责是提供与应用程序需求相匹配的存储数据的接口。...这很像Java、C#的类(Class)。 GraphQL的Type简单可以分为两种,一种叫做Scalar Type(标量类型),另一种叫做Object Type(对象类型)。...标量类型(Scalar Type) 标量GraphQL类型系统中最小的颗粒。类似于Java、C#的基本类型。...例如定义了一个名为User的对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据

    2.6K00

    30分钟理解GraphQL核心概念

    值得注意的是,GraphQL可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库),还有DateTime和ID这两个标量分别代表日期格式和主键 在使用...GraphQL实现文件上传接口时,需要声明一个Upload标量来代表要上传的文件 总之,我们只需要记住,标量GraphQL类型系统中最小的颗粒,关于它在GraphQL解析查询结果时,我们还会再提及它。...Note: 为了方便区分,Query特指GraphQL查询(包含三种类型),query指GraphQL查询类型(仅指查询类型) Query 上面所提及的3基本查询类型是作为Root Query...(比如上面例子article(id: Int)的id) ctx: 在Resolver解析链不断传递的中间变量(类似中间件架构的context) info: 当前Query的AST对象 值得注意的是...同时,还需要了解一些额外的查询概念,比如分页查询涉及的Connection、Edge等。 大概就这么多,如有错误,还望指正。

    2K40

    30分钟理解GraphQL核心概念

    值得注意的是,GraphQL可以通过Scalar声明一个新的标量,比如: prisma(一个使用GraphQL来抽象数据库操作的库),还有DateTime和ID这两个标量分别代表日期格式和主键 在使用...GraphQL实现文件上传接口时,需要声明一个Upload标量来代表要上传的文件 总之,我们只需要记住,标量GraphQL类型系统中最小的颗粒,关于它在GraphQL解析查询结果时,我们还会再提及它。...Note: 为了方便区分,Query特指GraphQL查询(包含三种类型),query指GraphQL查询类型(仅指查询类型) Query 上面所提及的3基本查询类型是作为Root Query...(比如上面例子article(id: Int)的id) ctx: 在Resolver解析链不断传递的中间变量(类似中间件架构的context) info: 当前Query的AST对象 值得注意的是...同时,还需要了解一些额外的查询概念,比如分页查询涉及的Connection、Edge等。 大概就这么多,如有错误,还望指正。

    98620

    我为什么要放弃RESTful,选择拥抱GraphQL

    「做减法:」 产品需求减少,页面需要减少功能,或者减少某些信息显示,那么数据就要做减法。 一种通常懒惰的做法是,前端不与后端沟通,仅在前端对数据选择性显示。...GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器获取数据,这些数据存储可能存储在数据库,API的职责是提供与应用程序需求相匹配的存储数据的接口。...这很像Java、C#的类(Class)。 GraphQL的Type简单可以分为两种,一种叫做Scalar Type(标量类型),另一种叫做Object Type(对象类型)。...标量类型(Scalar Type) 标量GraphQL类型系统中最小的颗粒。类似于Java、C#的基本类型。...例如定义了一个名为User的对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据

    2.4K40

    GraphQL

    GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器获取数据,这些数据存储可能存储在数据库,API的职责是提供与应用程序需求相匹配的存储数据的接口。...这很像Java、C#的类(Class)。 GraphQL的Type简单可以分为两种,一种叫做Scalar Type(标量类型),另一种叫做Object Type(对象类型)。...标量类型(Scalar Type) 标量GraphQL类型系统中最小的颗粒。类似于Java、C#的基本类型。...其中内建标量主要有: String Int Float Boolean Enum ID Scalar Type 上面的类型仅仅是GraphQL默认内置的类型,当然,为了保证最大的灵活性,GraphQL还可以很灵活的自行创建标量类型...例如定义了一个名为User的对象类型,并对其字段进行定义和施加限制条件: User字段控制 那么,返回数据时,像下面这种情况就是不允许的: 错误的表示 Graphql会根据Schema Type来自动返回正确的数据

    2.6K65

    新一代数据查询语言GraphQL来啦!

    所以最终GraphQL给了产品设计人员和开发人员重新思考移动应用数据获取的机会,它将开发的重点转移到了客户端应用,这里是设计师和开发人员最关注的地方。 3. 什么是GraphQL?...GraphQL服务通过定义类型和属性来创建,然后为在这些类型上的每个属性创建函数。跟SQL类似,这使得GraphQL在执行查询之前可以提供描述性的错误信息。...的类型系统分为标量类型(Scalar Types,标量类型)和其他高级数据类型,标量类型即可以表示最细粒度数据结构的数据类型,可以和 JavaScript的原始类型对应。...例如客户端要显示文章的内容,可能要调用文章接口、评论接口、用户信息接口。为构成对一个资源的完整视图,需要做多次单独调用,这样的数据获取方式非常不灵活。 而GraphQL给客户端带来了自主选择的权利。...RESTful: // 两趟查询,难以拓展 GET /user/111 GET /article/1001?

    3K70

    新一代数据查询语言GraphQL来啦!

    所以最终GraphQL给了产品设计人员和开发人员重新思考移动应用数据获取的机会,它将开发的重点转移到了客户端应用,这里是设计师和开发人员最关注的地方。 3. 什么是GraphQL?...GraphQL服务通过定义类型和属性来创建,然后为在这些类型上的每个属性创建函数。跟SQL类似,这使得GraphQL在执行查询之前可以提供描述性的错误信息。...的类型系统分为标量类型(Scalar Types,标量类型)和其他高级数据类型,标量类型即可以表示最细粒度数据结构的数据类型,可以和 JavaScript的原始类型对应。...例如客户端要显示文章的内容,可能要调用文章接口、评论接口、用户信息接口。为构成对一个资源的完整视图,需要做多次单独调用,这样的数据获取方式非常不灵活。 而GraphQL给客户端带来了自主选择的权利。...RESTful: // 两趟查询,难以拓展 GET /user/111 GET /article/1001?

    90830

    为什么我劝你放弃了Restful API?

    GraphQL本质上是一种基于api的查询语言,现在大多数应用程序都需要从服务器获取数据,这些数据存储可能存储在数据库,API的职责是提供与应用程序需求相匹配的存储数据的接口。...这很像Java、C#的类(Class)。 GraphQL的Type简单可以分为两种,一种叫做Scalar Type(标量类型),另一种叫做Object Type(对象类型)。...标量类型(Scalar Type) 标量GraphQL类型系统中最小的颗粒。类似于Java、C#的基本类型。...其中内建标量主要有: String Int Float Boolean Enum ID 上面的类型仅仅是GraphQL默认内置的类型,当然,为了保证最大的灵活性,GraphQL还可以很灵活的自行创建标量类型...例如定义了一个名为User的对象类型,并对其字段进行定义和施加限制条件: 那么,返回数据时,像下面这种情况就是不允许的: Graphql会根据Schema Type来自动返回正确的数据: 其他类型 除了上面的

    2.9K20

    GraphQL入门之自定义标量类型

    GraphQL 默认支持五种标量类型:Int,Float,String,Boolean 和 ID,可以满足大部分的使用场景,但有时候需要一些特殊的属性类型,此时我们就可以使用自定义标量类型来实现。...} schema { query: Query mutation: Mutation } schema 文件主要包括: 定义了一个标量类型 DateTime 在用户对象添加了一个标量类型的属性...registerDateTime 查询操作的时候按用户 registerDateTime 来查找 变更操作的时候添加了一个 registerDateTime 的标量类型 实现处理器 创建 resolvers.js...方法将值的AST表示转换为标量的后端表示。...执行对象查询操作的时候会调用 GraphQLScalarType 类 parseLiteral 方法,主要用了处理查询请求 hard code 的 registerDateTime 参数。

    11910

    GraphQL 初体验,Node.js 构建 GraphQL API 指南

    你想要呈现用户的个人资料页面,你可能需要进行一次 API GET 调用,以获取有关用户的信息,例如用户名或电子邮件。然后你可能需要进行另一个 API 调用以获取有关地址的信息,该信息存储在另一张表。...使用 GraphQL,你无需进行多个 API 调用(例如 GET /user/:id 和 GET /user/:id/addresses ),而是进行一次 API 调用并将查询提交到单个端点: ` query...(顺便说一下,GraphQL 模式不仅有对象,字段和标量类型,还有更多,你也可以合并接口,联合和参数以构建更复杂的模型,但本文中不会介绍)。...在左侧窗格,你可以输入所需要的任何有效 GraphQL 查询,而在右侧获得结果。...例如,无论成功与否,GraphQL 仅制定一个状态码 200.在这个响应中会返回一个特殊的错误键,供客户端解析和识别出错,因此,错误处理可能会有些棘手。

    8.3K40

    GraphQL与OpenAPI:数据治理的优缺点

    关系使用 Schema Definition Language (SDL) 指定,其中包括其类型系统标量、枚举、接口和联合。...虽然开发人员使用 REST 动词(GET、POST、PATCH 等)来定义操作的类别,但 OpenAPI 工具不会强制执行它们的用法。...这些数据产品可以在不同的操作重复使用。 重用:通过定义概念(如数据产品、查询片段或关系)来强调可重用的构建块,为灵活的组合奠定基础。...GraphQL GraphQL设计为可扩展的,并具有自定义指令、自定义标量和可扩展类型之类的功能。指令会修改操作的行为。...由于其专业化重点,GraphQL 可以提供以多种语言实现的参考库。这些库解析 GraphQL 模式和查询并将它们连接到代码,从而促进数据库和业务逻辑集成到响应

    10910

    GraphQL 名词 101:解析 GraphQL查询语法》【译】

    如上面的示例,参数可以是字面量,接下来还有参数作为变量形式的栗子。请注意,参数可以显示在任何字段,即使是嵌套层次很深的字段。...如果你不仅仅是用GraphQL执行查询操作,或是希望传递动态变量GraphQL查询,你就需要利用到这些新的GraphQL特性。...这样,无论你是在网络日志或者GraphQL服务器上发现错误,你都可以通过名字很轻松的在代码库定位问题,而不是靠猜测(类似的工具有 Apollo Optics)。...变量定义(Variable definitions):当客户端向GraphQL服务器发送查询时,会存在查询文档不变,当某些字段会动态变化的情况。这些就是查询变量。...变量使用特定的序列化协议(在目前的 GraphQL 服务实现,通常是使用JSON )通过查询文档独立传输。

    3K20

    GraphQL到底怎么使?看看智联前端团队技术沉淀

    操作模型:GraphQL 规范对数据的操作做了定义,有三种,query(查询)、mutation(变更)、subscription(订阅)。...所以为了避免误解,后文将把 Query Document(查询文档)称为 Document 或文档。一个 Document 可包含单个或多个操作,每个操作都可以查询补丁数量的跟字段。...}, updateTime: '2020-04-11' } } 预期数据会返回在 data ,当有错误时,会出现 errors 字段并按照规范规定的格式展示错误。...其他定义 当然,在使用 GraphQL 的过程,还可以: 使用 Variables(变量)复用同一段 Document 来动态传参。...schema ,field 和 resolver 和他们一一对应的关系,同时 schema 就是可执行 Schema。

    2.3K20

    防止你的GraphQL API被恶意查询

    在这篇文章,他描述了他们是如何在攻击中保护GraphQL API。 使用GraphQL,你可以随时查询想要的内容。 这对于使用API来说是惊人的,但也具有复杂的安全隐患。 ...例如,在Spectrum的GraphQL API,我们有这样的关系: type Thread {   messages(first: Int, after: String): [Message] }...(尽管DataLoader可能会缓解数据库压力,但网络和处理压力不会) 我们没有将第一个参数的类型设置为Int(允许任意数量),而是使用graphql-input-number创建了一个自定义标量,该标量将最大值限制为...100个对象,这将抛出错误。 ...运行上面的evilQuery,现在我们添加了graphql-cost-analysis,我收到一条错误消息,告诉我“GraphQL查询超过最大复杂度,请删除一些嵌套或字段,然后重试。

    1.8K10

    Go GraphQL 教程

    GraphQL API GraphQL 是一种专门用于API 的查询语言,由大厂 Facebook 推出,但是至今 GraphQL 并没有引起广泛的使用, 绝大多少还是采用 RESTful API...GraphQL 尝试解决这些问题: 查询语法和查询结果高度相似 根据需求获取字段 一个路由能获取多个请求的结果 无需接口版本管理 1 既然是一种专门用于 API 的查询语言,其必定有一些规范或者语法约束...具体包括: 别名:字段或者对象重命名、主要为解决冲突问题 片段:简单来说,就是提取公共字段,方便复用 变量:请求参数以变量的形式 指令:根据条件动态显示字段:@include 是否包含该字段、@skip...你只需要知道这些内容即可: 内置的标量类型:ID(实质是字符串,唯一标识符)、Boolean、String、Float 修饰符 !...只有一个路由:/graphql 无需版本管理 所有的请求方法都是:POST(query 动作当然也可以使用 GET,遇到请求参数较多时,不够方便) 接口调用示例:(根据查询文档,可以根据调用者的需求

    4.4K20
    领券