Не удается запросить регистрацию в поле типа Query - PullRequest
0 голосов
/ 16 марта 2020

Начал возиться с 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 содержит логи c. Я могу выбрать пользователей и токены, но когда я пытаюсь POST мутации

{
    signup(email: "my@email.com", password: "321321", role: "admin")
}

, я получаю ошибку Cannot query field "signup" on type "Query". Глядя на предложения GraphiQL после чтения схемы с сервера, похоже, что мутация регистрации даже не экспортируется:

schema hings

Некоторые учебные пособия скажем, я должен экспортировать распознаватели, используя

const resolvers = {
    query: {
        users: users.getAll,
        user: users.getById,
        token: users.login,
    },
    mutation: {
        signup: users.create,
    }
}

Но это тоже не работает. Есть намеки?

1 Ответ

2 голосов
/ 16 марта 2020

Вам необходимо указать тип операции (query, mutation или subscription) следующим образом:

mutation {
  signup(email: "my@email.com", password: "321321", role: "admin")
}

Если тип операции пропущен, предполагается, что операция является запросом , Это называется «краткой записью запроса», но работает, только если ваша операция безымянна и не содержит определений переменных.

Рекомендуется всегда включать тип операции независимо от этого.

...