Multer upload is not a function
As @Aabid told in The comments you will not need to use both, the multer middleware and upload in the controller.
You can use:
app.post('/editPhoto', upload.single('avatar'), (req, res, next) => { // here in the req.file you will have the uploaded avatar file})
Or you can use:
app.post('/editPhoto', (req, res, next) => { upload(req, res, function (err) { if (err) { // This is a good practice when you want to handle your errors differently return } // Everything went fine })})
So you use one of the 2 methods, not both at the same time.
// Multer upload configconst fs = require('fs');const path = require('path');const multer = require('multer');const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/tmp/') }, filename: function (req, file, cb) { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9) cb(null, file.fieldname + '-' + uniqueSuffix + path.extname(file.originalname)) }})const upload = multer({storage: storage});app.post('/uploadPhoto', (req, res, next) => { upload.single('filename_here')(req, res, function (err) { if (err) { // A Multer error occurred when uploading. res.json({msg: err.message}) } else { // Everything went fine. // req.file // { // fieldname: 'filename_here', // originalname: 'nhancv_dep_trai.png', // encoding: '7bit', // mimetype: 'image/png', // destination: '/tmp/', // filename: 'filename_here-1607694392023-220481630', // path: '/tmp/filename_here-1607694392023-220481630', // size: 5907 // } const file = req.file; console.log(file); // Delete tmp try { // fs.unlinkSync(file.path); } catch (e) { // Ignore console.error(e); } res.json({msg: 'ok'}); } });})
Test
curl --location --request POST '<host>:<port>/uploadPhoto' \--form 'filename_here=@"/Users/nhancv/Desktop/nhancv_dep_trai.png"'
var multer = require('multer');var upload = multer({ dest: './temp/hh' })var cpUpload = upload.fields([{ name: 'audio_file', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])app.post('/v1/index/uploads', cpUpload, function (req, res, next) { console.log(req.files['audio_file'][0]); console.log(req.files['gallery']); })