Как добавить дополнительные значения тела запроса в запрос Apollo GraphQL?

Я использую Apollo со службой Scaphold.io, и для записи больших объектов в эту службу мне нужно иметь возможность добавлять дополнительные параметры в тело запроса.

Полный пример Scaphold можно найти здесь: https://scaphold.io/docs/.

Но он делает что-то вроде этого:

form.append("variables", JSON.stringify({
  "input": {
    "name": "Mark Zuck Profile Picture",
    "userId": "VXNlcjoxMA==",
    "blobFieldName": "myBlobField"
  }
}));
// The file's key matches the value of the field `blobFieldName` in the variables
form.append("myBlobField", fs.createReadStream('./mark-zuckerberg.jpg'));

fetch("https://us-west-2.api.scaphold.io/graphql/scaphold-graphql", {
  method: 'POST',
  body: form
}).then(function(res) {
  return res.text();
}).then(function(body) {
  console.log(body);
});

Где это добавляет blobField к телу запроса.

Исходя из этого, мне нужно передать в переменные свойство blobFieldName, а затем добавить в тело запроса значение, переданное этому свойству с помощью BLOB-объекта. Однако, используя Apollo, я не могу добавить к телу запроса. Я попробовал следующее, но оно отсутствует в теле запроса, когда я проверяю в инспекторе сети:

export const withCreateCoverPhoto = graphql(CreateCoverPhoto, {
  props: ({mutate}) => ({
    createCoverPhoto: (name, file) => mutate({
      variables: {
        input: {
          blobFieldName: name,
        },
      },
      [name]: file
    }),
  }),
});

Пожалуйста, порекомендуйте.

1 ответ

Решение

Спасибо за вопрос. В настоящее время лучший способ загрузить файлы - [добавить их в FormData и отправить их на сервер с помощью fetch] ( https://medium.com/@danielbuechele/file-uploads-with-graphql-and-apollo-5502bbf3941e), По сути, вы не сможете иметь здесь кэширование для самого файла, но это лучший способ обработать загрузку файлов в Scaphold с использованием многочастного запроса.

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