无法查询类型 Query 上的字段注册
Posted
技术标签:
【中文标题】无法查询类型 Query 上的字段注册【英文标题】:Cannot query field signup on type Query 【发布时间】:2020-06-27 17:05:13 【问题描述】:开始搞乱 GraphQL,但我遇到了这个错误。不确定这是架构定义还是查询中的问题。
const express_graphql = require('express-graphql')
const buildSchema = require('graphql')
const users = require('../users/translator')
const schema = buildSchema(`
type User
id: ID
email: String
role: String
type Query
user(id: ID!): User
users: [User]
token(email: String!, password: String!): String!
type Mutation
signup(email: String!, password: String!, role: String!): ID
`
)
const resolvers =
users: users.getAll,
user: users.getById,
token: users.login,
signup: users.create,
module.exports = app =>
// GraphQL route
app.use('/graphql', express_graphql(
schema,
rootValue: resolvers,
graphiql: true,
))
app
是 express.js 服务器,而 const users
保存逻辑。我能够获取用户和令牌,但是当我尝试发布突变时
signup(email: "my@email.com", password: "321321", role: "admin")
我收到错误 Cannot query field "signup" on type "Query"
。在从服务器读取架构后查看 GraphiQL 建议,看起来注册突变甚至没有被导出:
一些教程说我应该使用导出解析器
const resolvers =
query:
users: users.getAll,
user: users.getById,
token: users.login,
,
mutation:
signup: users.create,
但它也不起作用。有什么提示吗?
【问题讨论】:
相信你在发出请求的时候如果不指定graphql操作,默认是查询(会解释错误信息)。我不确定确切的语法,但也许你可以试试mutation signup(email: "my@email.com", password: "321321", role: "admin")
顺便说一句,你可能shouldn't use buildSchema。
好的,一旦我得到这个工作,我会调查的。还是 buildSchema 搞砸了?
【参考方案1】:
您需要像这样指定操作类型(query
、mutation
或 subscription
):
mutation
signup(email: "my@email.com", password: "321321", role: "admin")
如果省略操作类型,则假定该操作是查询。这称为“查询速记表示法”,但仅在您的操作未命名且不包含任何变量定义时才有效。
最好始终包含操作类型。
【讨论】:
谢谢你的回答,丹尼尔。我尝试了您的查询示例,但随后在“查询”类型上出现“无法查询字段“突变”。”有什么想法吗? 如果您收到该错误,则说明您没有粘贴我展示的内容——您仍然使用一组无关的大括号将其包裹起来。这是mutation ...
,不是 mutation ...
你说得对,我还在考虑 json。删除了花括号,它起作用了。谢谢!以上是关于无法查询类型 Query 上的字段注册的主要内容,如果未能解决你的问题,请参考以下文章
出现错误:“Query”类型的“user”字段上的未知参数“id”[GraphQL,Relay,React]
GraphQL Relay 自省查询失败:“查询”类型上的未知字段“__type”
无法查询类型 \"Mutation\" 上的字段 \"addWorkout\"