无法查询类型 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】:

您需要像这样指定操作类型(querymutationsubscription):

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\"

Gatsby GraphQL 无法在 Strapi 的“文件”类型上查询字段“url”

小部件上的 dojo 查询

解析类型“查询”时,字段输入类型“长”不存在 [@6:1]