Сервер Apollo 2.0. Типа «Загрузить» не найдено в документе

Как воспроизвести:

server.js

const { ApolloServer, makeExecutableSchema, gql } = require('apollo-server');

const typeDefs = gql`
type Mutation {
    uploadAvatar(upload: Upload!): String!
}
`;
const resolvers = {
    Mutation: {
        uploadAvatar(root, args, context, info) {
            return 'test';
        }
    }
  };

const schema = makeExecutableSchema({ typeDefs, resolvers });

const server = new ApolloServer({
  schema,
});

server.listen().then(({ url }) => {
  console.info(`? Server ready at ${url}`);
});

package.json

"dependencies": {
    "apollo-server": "^2.0.0-rc.6",
    "graphql": "^0.13.2"
  }

На узле server.js мы получаем следующую ошибку:

Type "Upload" not found in document.

Учитывая последнюю версию сервера apollo, могу ли я добавить что-нибудь еще в запрос? Согласно руководству по это и нескольким другим источникам, которые я в настоящее время не могу вспомнить, не нужно делать ничего, кроме записи «Загрузить», и все должно работать нормально. Я что-нибудь упускаю?

Кажется, это должно работать правильно: `` Apollo Server 2.0 автоматически добавляет скаляр выгрузки в схему, поэтому любое существующее объявление скаляра выгрузки в схеме должно быть удалено. `` ''

michal.samluk 09.07.2018 15:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
4
1
3 147
1

Ответы 1

Я исправил это двумя способами, в примере с документами apollo:

https://www.apollographql.com/docs/guides/file-uploads.html

вы можете видеть, что он не использует makeExecutableSchema, но передал резолверы и схему серверу apollo, это остановило ошибку:

Type "Upload" not found in document.

Если вы хотите использовать makeExecutableSchema, импортируйте скаляр

const typeDefs = gql`
  scalar Upload

  type Mutation {
    uploadAvatar(upload: Upload!): String!
  }
  type Query {
    ping: String
  }
`;

https://github.com/jaydenseric/apollo-upload-examples/blob/master/api/schema.mjs

если вы посмотрите на некоторые из примеров исходного кода для сообщения в блоге, вы увидите, что он использует скаляр

Причина, по которой он не добавлялся автоматически:

Scalar Upload The Upload type automatically added to the schema by Apollo Server resolves an object containing the following:

  • поток
  • имя файла
  • mimetype
  • кодирование

Обновлено: Apollo прояснил, что при использовании makeExecutableSchema вам необходимо определить скаляр, чтобы он работал

In a situation where a schema is set manually using makeExecutableSchema and passed to the ApolloServer constructor using the schema params, add the Upload scalar to the type definitions and Upload to the resolver

https://www.apollographql.com/docs/guides/file-uploads.html#File-upload-with-schema-param

Другие вопросы по теме