У меня действительно тяжелые времена, так как более недели я пытаюсь загрузить файлы с помощью 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? Я действительно потерян этим. Спасибо заранее.