1
resposta

Erro de Fastify não suportar multipart/form-data

Fala pessoal, blz?

Estou migrando uma API que atualmente é em Express para Fastify. Porém depois que adicionei o multer na aplicação, aparece o error de que não suporta multipart/form-data. Fiz o passo para registrar o contentParse do multer.

// MULTER
app.register(multer.contentParser);

Já pesquisei em vários tópicos possíveis soluções e mesmo assim a seguinte mensagem aparece:

FastifyError [Error]: Unsupported Media Type: multipart/form-data
    at ContentTypeParser.run (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/fastify/lib/contentTypeParser.js:178:18)
    at Object.handleRequest (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/fastify/lib/handleRequest.js:54:33)
    at runPreParsing (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/fastify/lib/route.js:570:19)
    at next (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/fastify/lib/hooks.js:233:9)
    at /home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/@fastify/cors/index.js:204:12
    at resolveOriginOption (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/@fastify/cors/index.js:162:129)
    at addCorsHeadersHandler (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/@fastify/cors/index.js:164:3)
    at Object.handleCors (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/@fastify/cors/index.js:64:9)
    at hookIterator (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/fastify/lib/hooks.js:405:10)
    at next (/home/yoshi/Documentos/Projetos/GenerationPets/api-pet-guardian/node_modules/fastify/lib/hooks.js:239:18) {
  code: 'FST_ERR_CTP_INVALID_MEDIA_TYPE',
  statusCode: 415

E até o momento não estou sabendo como resolver.

Segue o link do repositório, se ajudar:

https://github.com/SpaceTeam42/api-pet-guardian

Desde já agradeço a atenção. Abraço.

1 resposta

Oi Lubni, tudo bem?

O Fastify não suporta multipart/form-data nativamente, mas você pode resolver isso usando o plugin @fastify/multipart. Aqui está um exemplo de como você pode configurar o Fastify para lidar com multipart/form-data:

  1. Primeiro, instale o plugin @fastify/multipart:

    npm install @fastify/multipart
    
  2. Em seguida, registre o plugin no seu aplicativo Fastify:

    const fastify = require('fastify')();
    
    fastify.register(require('@fastify/multipart'));
    
    fastify.post('/upload', async (req, reply) => {
      const data = await req.file();
      // Aqui você pode manipular o arquivo recebido
      console.log(data.filename);
      reply.send({ message: 'Arquivo recebido com sucesso!' });
    });
    
    fastify.listen(3000, err => {
      if (err) {
        console.error(err);
        process.exit(1);
      }
      console.log('Servidor rodando na porta 3000');
    });
    
  3. Certifique-se de remover qualquer configuração relacionada ao multer, pois ele não é necessário com o Fastify.

Com essas alterações, você deve conseguir lidar com uploads de arquivos usando multipart/form-data no Fastify. Espero que isso resolva o seu problema.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.