Неизвестный тип «Загрузить» в Apollo Server 2.6 - PullRequest
1 голос
/ 03 июня 2019

Я хочу загрузить файл через GraphQL, а затем статья .

Вот моя схема:

extend type Mutation {
  bannerAdd(
    title: String!
    image: Upload
  ): ID
}

Однако, когда я запускаю приложение, это дает мне эту ошибку:

Неизвестный тип «Загрузить». Вы имели в виду "Float"?

В соответствии с вышеприведенной статьей, Apollo Server будет автоматически генерировать скаляр загрузки, но почему это происходит?

Также определите, что загрузка скаляра вручную также не работает:

scalar Upload

...

Дает мне эту ошибку:

Ошибка: может быть только один тип с именем «Загрузить».

Кажется, с моим кодом все в порядке. Есть что-нибудь, что я пропустил? Используя Node@10.14.2, Apollo Server@2.6.1, Apollo Server Express@2.6.1 и polka@0.5.2.

Любой совет будет очень признателен.

1 Ответ

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

Вот решение, которое я сделал, добавив пользовательский скаляр с именем «FileUpload» и добавив GraphQLUpload в качестве распознавателя следующим образом:

import { GraphQLUpload } from 'graphql-upload';

export const resolvers = {
  FileUpload: GraphQLUpload
};

Работает отлично, но может быть не идеальным решением. Надеюсь, Аполлон исправит это в ближайшее время.

P.S. Чтобы загрузить файл из браузера, вам также необходимо правильно установить ссылку для загрузки в клиенте Apollo. Вот мой код:

import { ApolloLink, split } from 'apollo-link';
import { createHttpLink } from 'apollo-link-http';
import { createUploadLink } from 'apollo-upload-client';

// Create HTTP Link
const httpLink = createHttpLink({
  uri: ...,
  credentials: 'include'
});

// Create File Upload Link
const isFile = value =>
  (typeof File !== 'undefined' && value instanceof File) || (typeof Blob !== 'undefined' && value instanceof Blob);
const isUpload = ({ variables }) => Object.values(variables).some(isFile);
const uploadLink = createUploadLink({
  uri: ...
  credentials: 'include'
});

const terminatingLink = (isUpload, uploadLink, httpLink);

const link = ApolloLink.from([<Some Other Link...>, <Another Other Link...>, terminatingLink]);

const apolloClient = new ApolloClient({
  link,
  ...
});
...