Apollo-link-rest: ¿Es posible enviar objetos de archivo con apollo-link-rest?

Creado en 11 nov. 2019  ·  5Comentarios  ·  Fuente: apollographql/apollo-link-rest

Una consulta de ejemplo:

  mutation register {
    register(
      input: {
        email: $email
        avatar: $avatar
        password: $password
      }
    ) @rest(type: "Register", path: "auth/register", method: "POST")
  }

El formulario tiene una entrada de archivo que envía un objeto Archivo (esta es la propiedad del avatar). Al registrar la variable de avatar, puedo ver que esta propiedad está definida, sin embargo, al enviar los datos con apollo-link-rest, el objeto de archivo se vuelve vacío.

Registrando la variable antes de enviar la mutación:
image

Al enviar los datos al servidor a través de apollo, el objeto está vacío:

image

No pude encontrar ninguna mención sobre la carga de archivos en los documentos, por lo que no estoy seguro de si es posible.

help wanted 🛠 question❔

Todos 5 comentarios

Creo que esto es posible, ya que tuvimos que corregir algunos errores relacionados con la manipulación de objetos de archivo.

Dicho esto, no he usado esto recientemente, ya que uso Apollo-link-rest en react-native.

¡Es posible que deba leer nuestra fuente para depurar esto y descubrir por qué podría no estar funcionando! ¡Es posible que la solución real esté en Apollo-client, no en Apollo-link-rest!

¡Gracias por la respuesta! Principalmente quería comprobar que no me faltaba algo obvio, como una configuración que debe habilitarse o un enlace que debe agregarse: mild_smiling_face:

Por ejemplo, he visto a algunas personas mencionar que se requiere apollo-upload-client (https://github.com/jaydenseric/apollo-upload-client) para cargar archivos en apollo normal.

No estoy seguro de si es necesario agregar un enlace similar al cliente en apollo-link-rest.

No, eso no se aplica aquí.

Recientemente, en julio, alguien publicó un ejemplo de carga de archivo react usando apollo-link-rest.

¿Quizás esto ayude?

https://github.com/apollographql/apollo-link-rest/issues/200#issuecomment -509287597

Si lo averigua, tal vez deberíamos escribir una sección de documentación sobre cómo hacer esto.

¡Muchas gracias @fbartho!

Ese problema ayudó a resolver el problema, los cambios clave que tuve que hacer fueron agregar el método de codificación de archivos a bodySerializers

bodySerializers: {
    fileEncode: (data: any, headers: Headers) => {
      const formData = new FormData()
      formData.append('file', data, data.name)
      headers.set('Accept', '*/*')
      return { body: formData, headers }
    }
  }

Y también la parte donde especificas el serializador en la consulta

@rest(
        type: "File"
        path: "YOUR_API_URL"
        method: "POST"
        bodySerializer: "fileEncode"
      ) {

Sería muy útil si algo como esto estuviera en los documentos. ¡Gracias de nuevo!

¿Fue útil esta página
0 / 5 - 0 calificaciones