0
votes

I'm getting that cloudinary uploader is undefined, although when I log cloudinary to console it shows that my uploader is defined.

error display on app

main code lines --

const cloudinary = require('../cloudinary');
await cloudinary.uploader.destroy(filename); //this is where is failed

at controller

module.exports.updateCampground = async (req, res) => {
    const { id } = req.params;
    const campground = await Campground.findByIdAndUpdate(id, { ...req.body.campground });
    const imgs = req.files.map(f => ({ url: f.path, filename: f.filename }));
    campground.images.push(...imgs);
    await campground.save();
    if (req.body.deleteImages) {
        for (let filename of req.body.deleteImages) {
            //logs cloudinary conataining uploader, still uploader is undefined
            console.log(cloudinary,cloudinary.uploader); 
            await cloudinary.uploader.destroy(filename);
        }
        await campground.updateOne({ $pull: { images: { filename: { $in: req.body.deleteImages } } } })
    }
    req.flash('success', 'Successfully updated campground!');
    res.redirect(`/campgrounds/${campground._id}`)
};

at cloudinary.js

const cloudinary = require('cloudinary').v2;
const { CloudinaryStorage } = require('multer-storage-cloudinary');

cloudinary.config({
    cloud_name:process.env.CLOUDINARY_CLOUD_NAME,
    api_key: process.env.CLOUDINARY_KEY,
    api_secret: process.env.CLOUDINARY_SECRET
});

const storage = new CloudinaryStorage({
    cloudinary,
    params: {
      folder: 'YelpCamp',
      allowed_formats: ['jpeg','png', 'jpg'],
      format: async (req, file) => 'png', // supports promises as well
    }
  }); 

  module.exports = {
      cloudinary,
      storage
  };
1

1 Answers

0
votes

I've forgotten to {} around cloudinary.

const {cloudinary} = require('./cloudinary');