Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

343
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda