graphql: должен предоставить источник.Получено: {вид: "Документ, определение ...} - PullRequest
0 голосов
/ 17 июня 2019

Я действительно новичок в Graphql (только вчера на самом деле).Я "играю" и пробую различные инструменты экосистемы (apollo-server, graphql.js ... ect).

Ради эксперимента я пытаюсь вызвать запрос из узла nodejs.(а не от клиента в браузере, такого как приложение реагирования)

Прежде всего, это моя простая схема вместе с распознавателями:

export const mySchema = gql`
   type User {
      id: ID!
      name:  
      surname: String
   }

   # root query has been defined in another file
   extend type Query {
      users: [User]
      test: [User]
   }
` 
export const myResolvers = {
   users: () => [ __array_of_users__ ],
   test: () => /* this is where I would like to re-invoke the 'users query'
}

Использование функции makeExecutableSchema,Я создаю объект schema с моими типами и определителями и экспортирую эту схему в серверное приложение apollo.Пока что все работает нормально.

Теперь, следуя предложенному stackoverflow, предлагаемому решению , я создал вспомогательную функцию, которая должна позволять мне вызывать запрос, определенный в моей схеме, следующим образом:

import { graphql } from "graphql";
import { schema } from "./my-schema";

export const execute = str => {
  return graphql(schema, str );
};

С помощью этой вспомогательной функции мои преобразователи становятся:

import { gql } from "apollo-server-express";
import { execute } from '__path_to_helper_function__';

export const myResolvers = {
  users: () => [ __array_of_users__ ],
  test:  () => execute( gql`
     query users {
           name
      }    
  `)
}

Но на игровой площадке, когда я пытаюсь выполнить запрос:

   {
      test {
        name
      }
   }

, я получаю следующую ошибку:

enter image description here

Я даже не знаю, можно ли выполнить то, что я пытаюсь сделать (вызвать запрос изнутри узла).Любое предложение будет с благодарностью.

Thnaks

1 Ответ

0 голосов
/ 17 июня 2019

graphql-tag берет строку и разбирает ее на DocumentNode объект.По сути, это то же самое, что и передача String в функцию parse.Некоторые функции, экспортируемые модулем graphql, например execute, ожидают передачи в объекте DocumentNode, а функция graphql - нет.Он должен быть передан как простая строка в качестве запроса, как вы можете видеть из подписи:

graphql(
  schema: GraphQLSchema,
  requestString: string,
  rootValue?: ?any,
  contextValue?: ?any,
  variableValues?: ?{[key: string]: any},
  operationName?: ?string
): Promise<GraphQLResult>

Итак, просто удалите тег gql.Вы можете увидеть (неполную) ссылку на API здесь .

...