Multer es un middleware para manejar los datos enviados desde el formato multipart/form-dataque es usado principalmente para subir archivos. Multer agregar un objeto body y un archivo o objetos de archivo al objeto de petición (request). El objeto body contiene los valores de los campo de texto del formulario el archivo o los archivos que han sido cargados a través del formulario.

Instalación

npm install express multer

Agregando multer al proyecto

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

La propiedad dest es la ruta donde el archivo será guardado.

Creamos el endpoint para poder subir un archivo.

app.post('/single', upload.single('profile'), (req, res) => {
  try {
    res.send(req.file);
  }catch(err) {
    res.status(400).send('message': err.message);
  }
});

El nombre del campo del formulario debe ser el mismo valor que pasamos como argumento para upload.single

Si recibes una respuesta satisfactoria por parte del servidor tendrás que revisar el directorio uploads para encontrar el archivo pero éste no tendrá una extensión; para resolverlo tendremos que usar la opción storage en lugar de dest .

También usaremos Multer con la función DiskStorage y MemoryStorage para poder tener un mejor control de lo que cargamos al servidor.

const storage = multer.diskStorage ({ 
    destination: (req, file, cb) => {
        cb(null, './uploads');
    },
    filename: (req, file, cb) => {
        cb(null , file.originalname);
    }
});