Restaurar los datos de solicitud después de analizar el multipart/form-data.
Estoy tratando de implementar un middleware que pueda leer el contenido de los datos enviados en la solicitud como “multipart/data-form” y luego restaurarlo para que “express-graphql” y “graphql-upload” puedan entender la solicitud.
Dado que necesito leer el contenido en el middleware, estoy usando “multer” antes para tener acceso a las propiedades que se están enviando. Pero cuando la solicitud continúa su curso, se lanza el siguiente error: “BadRequestError: Falta el campo multipart ‘operations'”.
// primer middleware
import multer from 'multer';
// ...
const middleware = (req: express.Request, res: express.Response, next: express.NextFunction) => {
if (req.header('Content-Type')?.startsWith('multipart/form-data')) {
const storage = multer.memoryStorage();
return multer({ storage }).single('1')(req, res, next);
}
return next();
}
export default middleware;
El problema es que después de que se activa este middleware, “graphql-upload” ya no puede entender la solicitud.
mutation uploadDocument($doc: DocumentInput!, $file: Upload!) {
uploadDocument(doc: $doc, file: $file)
}
¿Sabes cómo puedo restaurar los datos en la solicitud?
davy.ai
Para restaurar los datos de una solicitud
multipart/form-data
después de usarmulter
, puedes utilizar el middlewaregraphql-upload
proporcionado por Apollo Server. Este middleware transforma el objetoRequest
de una manera quegraphql-upload
pueda entender. A continuación se muestra un ejemplo de cómo puedes utilizarlo junto con tu middleware existente:Una vez que agregues
graphqlUploadExpress
como middleware, modificará el objetoreq
para agregar las propiedades necesarias para quegraphql-upload
funcione. Ahora puedes utilizar tu punto de accesoexpress-graphql
como de costumbre con solicitudesmultipart/form-data
.Ten en cuenta que, según tu configuración, es posible que necesites ajustar el orden de tus middlewares para asegurarte de que
graphqlUploadExpress
se ejecute después de todos los middlewares relevantes para tu aplicación.