Невозможно загрузить файл Apollo с React и Meteor - PullRequest
0 голосов
/ 22 апреля 2020

У меня действительно тяжелые времена, так как более недели я пытаюсь загрузить файлы с помощью Apollo в проекте Meteor-React. Я прочитал тонны статей и документации, но все еще не получил решение.

Это мой React-компонент для загрузки файлов

import React from 'react';
import { Mutation } from 'react-apollo'

import gql from 'graphql-tag';

const SINGLE_UPLOAD_MUTATION = gql`
  mutation singleUpload($file: Upload!) {
    singleUpload(file: $file) {
      _id
      location
    }
  }
`;

export const SingleUpload = () => {
  return (   
    <Mutation mutation={SINGLE_UPLOAD_MUTATION}>
      {uploadFile => (
        <input
        type="file"
        required
        onChange={({ target: { validity, files: [file] } }) =>
          validity.valid && uploadFile({ variables: { file: file}})
        }
       />
      )}
    </Mutation>
  );
};

На сервере это моя схема мутаций:

type Mutation {
      singleUpload(file: Upload!): File!
}

И мои распознаватели, я просто пытаюсь console.log загруженного файла:

singleUpload: (parent, args) => { 
    console.log("REACHED SERVER");
    console.log(args);
    return args.file.then(file => {
      const {createReadStream, filename, mimetype} = file

      const fileStream = createReadStream()

      fileStream.pipe(fs.createWriteStream(`./uploadedFiles/${filename}`))

      return file;
    });
  }

Это конфигурация Apollo:

const queryOrMutationLink = () =>
  createUploadLink({
    uri: Meteor.settings.public.graphQL.httpUri,
    credentials: 'same-origin',
  });

const subscriptionLink = () =>
  new WebSocketLink({
    uri: Meteor.settings.public.graphQL.wsUri,
    options: { reconnect: true },
  });

const apolloClient = new ApolloClient({
  connectToDevTools: true,
  link: ApolloLink.from([
    MeteorAccountsLink(),
    errorLink,
    ApolloLink.split(
      ({ query }) => {
        const { kind, operation } = getMainDefinition(query);
        return kind === 'OperationDefinition' && operation === 'subscription';
      },
      subscriptionLink(),
      queryOrMutationLink(),
    ),
  ]),
  cache: new InMemoryCache().restore(window.__APOLLO_STATE__),
});

export default apolloClient;

Когда я пытаюсь загрузить файл, я получаю сетевую ошибку grapghql (статус 500) с этим сообщением отсутствует тело POST. Вы забыли использовать промежуточное ПО для body-parser? Я действительно потерян этим. Спасибо заранее.

...