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

345
Visualizações
La carga de archivos hace que Node JS no responda con Multer

Estoy usando el paquete Multer Node JS para cargar archivos en mi servidor de aplicaciones, el código es básicamente un código de archivo de carga típico

 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 })

Pero cada vez que se carga un archivo, el servidor Node deja de responder y la interfaz de otra solicitud no recibe ninguna respuesta de otras API hasta que se carga el archivo.

¿Cuál es la mejor manera de abordar esto?

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

0

En su código de muestra, solo debe enviar una respuesta al cliente mediante res.json() o 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

Puedo darte un ejemplo de cómo implementé una carga de imágenes en mi aplicación. es el código para cargar una imagen de perfil para un usuario. También estoy usando el middleware multer para que sea similar para ti:

código es el siguiente:

 // 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); } }, });

y aquí el código en el servicio que maneja la carga de archivos

 // 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', }); }); };

luego uso el middleware en mi archivo de rutas de perfil como este:

 // 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);

mi controlador luego llama a la función de servicio con la lógica comercial real como esta:

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

y finalmente mi ruta es utilizada por mi archivo app.js de esta manera:

 // 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;

espero haber podido orientarte en la dirección correcta con mi ejemplo

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