如何在Nodejs中为图像的缓冲区或URL设置MIME类型。

6
router.post('/', (req, res)=>{

let searchTerm = req.body.search;
const kwords = new keywords({
    keyword: searchTerm
});
keywords.findOne({keyword: searchTerm}, function(err, key){
    if(err) throw err;
    else if(!key){
        kwords.save();
    }
});


google.list({
    keyword: searchTerm,
    num: 15,
    detail: false,
    nightmare: {
        show: false
    }
})
.then(function(images){

    images.forEach(function(image, index){

        let url = image.url;


        //compression
        Jimp.read(url,  function(err, img){ 

            if(err) throw err;
        if(img){  
            img.resize(256, 256)
              .quality(60)
              .greyscale()
              .write("public/images/"+searchTerm+index+".jpg");
             }
        });
    });
    res.redirect('/list');

}).catch(function(err){
    console.log('err', err);
});

我正在使用image-scraper和jimp库。

Jimp.read()函数内,当url没有mime类型时,img变量为null,所以我大部分时间只能获取13,14张图片,而不是15张。请有经验的人帮我解决这个问题,让我可以成功获取所有15张图片。

});


你解决了这个问题吗? - Noitidart
我也在寻找这个。 - Garrett
1个回答

0

你应该使用 Promise 方法代替回调函数

google.list({
    keyword: searchTerm,
    num: 15,
    detail: false,
    nightmare: {
        show: false
    }
})
.then(function(images){
    images.forEach(function(image, index){
        let url = image.url;
        //compression
        Jimp.read(url)
        .then(function(img) {
            if(img){  
              img.resize(256, 256)
               .quality(60)
               .greyscale()
               .write("public/images/"+searchTerm+index+".jpg");
            }
        }).catch(console.error)
    });
    res.redirect('/list');

})
.catch(function(err){
    console.log('err', err);
});

你能解释一下你的答案吗?问题是什么,你是如何解决的? - Simas Joneliunas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接