Node.js Multer с Imagemin для сжатия файлов - PullRequest
0 голосов
/ 07 апреля 2020

Это мой код:

const imagemin=require('imagemin');
const imageminMozjpeg = require('imagemin-mozjpeg');
const multer=require('multer');
const upload=multer({storage:storage});
var imageUpload=upload.single('file');
var storage=multer.diskStorage(
{
    destination:function(req,file,cb) 
    {
        cb(null,'./tempuploads/')
    },
    filename:function(req, file, cb) 
    {
        cb(null,file.originalname)
    }
});
exports.filecompressor=async(req,res)=>
{
    imageUpload(req, res, function(err) 
    {
        let filetoupload=req.file;
        let filename=filetoupload.originalname;
        if(err)
        {
            console.log(err)
        }
        let temppath="./tempuploads/"+filename;
        imagemin([temppath],
        {
            destination: './cachedimages/',
            plugins:[imageminMozjpeg({quality: 50})]
        }).then(result=>
        {
            console.log(result)
        });
    });
};

Я хочу от imageUpload(req, res, function(err){}); до return temppath, чтобы я мог использовать функцию imagemin() вне ее и добавить к ней ожидание.

Может кто-нибудь, пожалуйста, помогите мне ??

1 Ответ

1 голос
/ 07 апреля 2020

Вы можете преобразовать функцию обратного вызова imageUpload в обещание, например:

exports.filecompressor = async (req, res) => {
  return new Promise((resolve, reject) => {
    imageUpload(req, res, function (err) {
      let filetoupload = req.file;
      let filename = filetoupload.originalname;
      if (err) {
        console.log(err);
        return reject(err);
      }
      let temppath = "./tempuploads/" + filename;
      resolve(temppath);
    });
  });
};
...