【问题标题】:How to fix cloudinary error "Must supply api_key"如何修复云错误“必须提供 api_key”
【发布时间】:2021-12-13 00:16:56
【问题描述】:

我正在使用 multer 和 cloudinary 构建一个图像上传应用程序。我已经使用 dotenv 正确配置了我的环境变量。但是,当我尝试使用 Cloudinary 上传文件时,我收到错误“必须提供 api_key”。

Cloudinary API 凭据已正确提供和配置,如下面的代码所示:

cloudinary.js


const cloudinary = require('cloudinary');

cloudinary.config({
    cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
    api_key: process.env.CLOUDINARY_API_KEY,
    api_secret: process.env.CLOUDINARY_API_SECRET
})

exports.uploads = (file, folder) => {
    return new Promise(resolve => {
        cloudinary.uploader.upload(file, (result) => {
            resolve({
                url: result.url,
                id: result.public_id
            })
        }, {
            resource_type: "auto",
            folder: folder
        })
    })
}

.env

CLOUDINARY_CLOUD_NAME='my_cloudinary_cloud_name'
CLOUDINARY_API_KEY='my_cloudinary_api_key'
CLOUDINARY_API_SECRET='my_cloudinary_api_secret'

我的 app.js 文件中也需要正确的 .env 文件:

app.js

require('dotenv').config({
    path: './app/config/.env'
});

如果我控制台记录 cloudinary.js 文件中的任何 cloudinary 配置变量,我会得到预期的输出,但是当我尝试在上传路由中使用 cloudinary 时,我会得到必须提供 api_key 的错误。请有人能帮我指出我做错了什么吗?我不想在 cloudinary.js 文件中写出我的 cloudinary 配置变量,因为代码正在发布到 Github。

这是我使用 cloudinary 的发布路线:

const express = require('express'),
    Product = require('../app/models/product'),
    upload = require('../app/utils/multer'),
    cloudinary = require('../app/utils/cloudinary'),
    fs = require('fs'),
    router = express.Router();

router.post('/products', upload.array('image'), async (req, res) => {
    const uploader = async (path) => await cloudinary.uploads(path, 'Images');
    const urls = []
    const files = req.files
    for (const file of files) {
        const {
            path
        } = file;
        const newPath = await uploader(path)
        urls.push(newPath)
        fs.unlinkSync(path)
    }

    const name = req.body.name

    const product = new Product({
        name: name,
        imageone: urls[0].url,
        imagetwo: urls[1].url,
        imagethree: urls[2].url,
        imagefour: urls[3].url
    })

    product.save(function (err, prod) {
        if (err) {
            throw err
        } else {
            req.flash('success', "You have added a new product.")
            res.redirect("/dashboard")
        }
    })
})

module.exports = router;

【问题讨论】:

    标签: node.js mongodb express multer cloudinary


    【解决方案1】:

    Kóyo @awesome-bassey!

    遵循 Cloudinary docs for Nodejs 和官方 repo 我建议您导入 cloudinary API 的 v2

    如果您的问题仍然存在 - 请与我们分享堆栈跟踪

    【讨论】:

    • 我已经导入了 v2.它仍然没有工作。我也尝试了很多其他选项...请问如何共享堆栈跟踪?
    • 在这里您可以阅读更多关于stack-trace 的信息,当然我建议您仔细检查您的.env 是否已正确加载。
    【解决方案2】:

    使用Node.js v2,它可以声明为installation setup document中描述的以下代码示例(即require('cloudinary').v2 em>):

    var cloudinary = require('cloudinary').v2; 
    
    cloudinary.config({ 
       cloud_name: '<YOUR_CLOUD_NAME>', 
       api_key: '<YOUR_API_KEY>', 
       api_secret: '<YOUR_API_SECRET>',
       secure: true
    });
    
    cloudinary.uploader.upload("my_image.jpg", 
              function(error, result) {
                 console.log(result, error);
    });
    

    【讨论】:

      猜你喜欢
      • 2019-10-21
      • 2022-12-10
      • 1970-01-01
      • 2018-12-01
      • 2016-10-16
      • 2018-04-01
      • 2019-01-11
      • 1970-01-01
      • 2021-07-12
      相关资源
      最近更新 更多