Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

342
Visualizações
File upload makes Node JS unresponsive with Multer

I am using Multer Node JS package to upload files to my app sever , the code is basically typical upload file code

const express = require('express')
const multer  = require('multer')
const upload = multer({ dest: 'uploads/' })

const app = express()

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
})

app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files is array of `photos` files
  // req.body will contain the text fields, if there were any
})

But each time a file is being uploaded the Node server becomes unresponsive and frontend from other request doesnt receive any response from other APIs until the file is uploaded.

Whats the best way to tackle this ?

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

In your sample code, you must just send a response to the client by res.json() or res.end() :

const express = require('express');
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

const app = express();

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any

  res.status(204).end();
});

app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files is array of `photos` files
  // req.body will contain the text fields, if there were any

  res.status(204).end();
});
about 4 years ago · Juan Pablo Isaza Relatório

0

i can give you an example of how i implemented an imageupload in my app. it the code to upload a profile image for a user. i am also using multer middleware so it shoulder be similiar for you:

code is as follows:

// multer middleware:
const multer = require('multer');

const MIME_TYPE_MAP = {
  'image/png': 'png',
  'image/jpeg': 'jpg',
  'image/jpg': 'jpg',
};

module.exports = storage = multer.diskStorage({
  destination: (req, file, cb) => {
    const isValid = MIME_TYPE_MAP[file.mimetype];
    let error = new Error('invalid mime type');
    if (isValid) {
      error = null;
    }
    cb(error, 'images');
  },
  filename: (req, file, cb) => {
    const name = file.originalname.toLowerCase().split(' ').join('-');
    const ext = MIME_TYPE_MAP[file.mimetype];
    if (name.includes('.' + ext)) {
      cb(null, name)
    } else {
      cb(null, name + '.' + ext);
    }
  },
});

and here the code in the service handling the fileupload

// profile service in backend written in express
exports.uploadImage = (req, res, next) => {
  const url = req.protocol + '://' + req.get('host');
  profileRepository
    .findOne({ _id: req.params.id })
    .then((response) => {
      const fetchedUser = response;
      fetchedUser.imagePath = url + '/images/' + req.file.filename;
      profileRepository
        .updateOne({ _id: req.params.id }, fetchedUser)
        .then((response) => {
          return res.status(200).json({
            message: 'profileimage updated',
          });
        })
        .catch((error) => {
          return res.status(500).json({
            message: 'uploading image failed',
          });
        });
    })
    .catch((error) => {
      return res.status(404).json({
        message: 'fetching user failed',
      });
    });
};

then i use the middleware in my profile routes file like this:

// profile.routes.js
const express = require('express');
const ProfileController = require('./profileController');
const checkAuth = require('../middleware/checkAuth');
const router = express.Router();
const fileStorage = require('../middleware/fileStorage');
const multer = require('multer');
// imageUpload
router.post('/user/image/:id', checkAuth, multer({storage: fileStorage}).single('image'), ProfileController.image);

my Controller then calls the service function with the actual business logic like this:

// profile.controller.js
const profileService = require('./profileService');
exports.image = (req, res, next) => {
  return profileService.uploadImage(req, res);
};

and finally my route is used by my app.js file like this:

// app.js
const express = require('express');
const profileRoutes = require('./profile/profileRoutes');

const app = express();

// set images path for saving images on server
app.use('/images', express.static(path.join('images')));

app.use('/api', profileRoutes);

module.exports = app;

i hope i was able to point you in the right direction with my example

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda