当前位置: 首页 > 知识库问答 >
问题:

cloudinary错误:必须提供api密钥-/node_modules/cloudinary/lib/utils。js:982

温嘉赐
2023-03-14

我正在使用cloudinary在我的网页上上传照片。我在网页上添加了一个新功能(facebook登录),现在当我像以前一样上传照片时,cloudinary会抛出一个错误。

“/home/ubuntu/workspace/YelpCamp/node_modules/cloudinary/lib/utils.js:982抛出“必须提供api_密钥”;^必须提供api_密钥”

API_密钥、API_密钥和CLOUD_名称保存在。env文件,这些都是正确的。

var express = require("express");
var router  = express.Router();
var Campground = require("../models/campground");
var middleware = require('../middleware') ;          //because of the index.js default name
var geocoder = require('geocoder');

///////////////////////////////////////
// MULTER

var multer = require('multer');
var storage = multer.diskStorage({
  filename: function(req, file, callback) {
    callback(null, Date.now() + file.originalname);
  }
});
var imageFilter = function (req, file, cb) {
    // accept image files only
    if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/i)) {
        return cb(new Error('Only image files are allowed!'), false);
    }
    cb(null, true);
};
var upload = multer({ storage: storage, fileFilter: imageFilter});

///////////////////////////////////////
//CLOUDINARY

var cloudinary = require('cloudinary');
cloudinary.config({ 
  cloud_name: process.env.CLOUD_NAME, 
  api_key: process.env.CLOUD_KEY,
  api_secret: process.env.CLOUD_SECRET
});





router.post('/', middleware.isLoggedIn, upload.single('image'), function(req, res) {
    console.log(req.user);
    //GEOCODER
    geocoder.geocode(req.body.location, function (err, data) {              
        
    //CLOUDINARY UPLOAD   
         cloudinary.uploader.upload(req.file.path, function(result) {           
                 var image = {
                     path: result.secure_url,
                     id: result.public_id
                 };
                 
                 
                 var name = req.body.name;
                 var price = req.body.price;
                 var description = req.body.description;
                 if(req.user.facebook.username) {
                     var username = req.user.facebook.username;
                 } else {
                     username = req.user.local.username;
                 }
                 var author = {
                    id: req.user._id,
                    username: username
                };
               if(!data.results[0]) {
                    var lat = 90;
                    var lng = 0;
                    var location = "North Pole";
                   
               } else {
                 lat = data.results[0].geometry.location.lat;
                 lng = data.results[0].geometry.location.lng;
                 location = data.results[0].formatted_address;
               }
                
                var newCampground = {name: name, price: price, image: image, description: description, author: author, location: location, lat: lat, lng: lng};
          //create      
            Campground.create(newCampground, function(err, result) {
             if(err) {
                 console.log(err);
             } else {
                 console.log(result);
                 res.redirect('/campgrounds');
             }
             
            });  
        });
    });
});
html prettyprint-override"><% include ../partials/header %>







    <div class="row">
        <h1 style="text-align: center;">Create a New CampGround</h1>
        <div style='width: 30%; margin: 30px auto;'>
            <form action='/campgrounds' method='POST' enctype="multipart/form-data">
                <div class='form-group'>
                    <label for="name">Name</label>
                    <input class="form-control" id="name" type='text' name='name' placeholder='Name'>
                </div>
                 <div class='form-group'>
                     <label for="price">Price</label>
                    <input class="form-control" id="price" type='number' name='price' placeholder='price' min="0.01" step="0.01">
                </div>
                <div class='form-group'>
                    <label for="image">Image</label>
                    <input type="file" id="image" name="image" accept="image/*" required>
                </div>
                <div class='form-group'>
                    <label for="description">Description</label>
                    <input class="form-control" id="description" type='text' name='description' placeholder='Write description'>
                </div>
                <div class="form-group">
                    <label for="location">Location</label>
                    <input class="form-control" type="text" name="location" id="location" placeholder="Yosemite National Park, CA">
                </div>
                <div class='form-group'>
                    <button class="btn btn-lg btn-default btn-primary btn-block">Submit!</button>
                </div>
            </form>
            <a href="/campgrounds"> Go Back </a>
        </div>
        
    </div>






<% include ../partials/footer %>

共有3个答案

莘康裕
2023-03-14

你能试着把API密钥直接放在你的代码中,看看这是否有效吗。您还可以添加一个print语句,查看API密钥的响应

娄飞鸾
2023-03-14

原因可能是你的js文件没有包含require('dotenv')。config() 尝试添加此代码,然后运行代码。

白修谨
2023-03-14

cloudinary配置值必须是字符串,否则将无法工作。在cloudinary段中以以下任一方式配置代码:

1a:CloudinaryConfig。js:

cloudinary.config({ 
    cloud_name: process.env.CLOUD_NAME, 
    api_key: process.env.CLOUD_KEY,
    api_secret: process.env.CLOUD_SECRET
});

1b:。环境

   CLOUDINARY_CLOUD_NAME='sample'
   CLOUDINARY_API_KEY='874837483274837'
   CLOUDINARY_API_SECRET='a676b67565c6767a6767d6767f676fe1'

2:将cloudinary提供的值直接放入代码中:

   cloudinary.config({ 
       cloud_name: 'sample', 
       api_key: '874837483274837',
       api_secret: 'a676b67565c6767a6767d6767f676fe1'
   });

注意:确保您不会出于安全原因公开配置值。如果要将代码提交给github这样的公共回购,请使用。gitignore删除存储秘密信息的任何文件

查看cloudinary文档以获取更多参考:https://cloudinary.com/documentation/node_integration.

 类似资料:
  • 我是一名学生,不熟悉Cloudinary和API证书。我试图在我的应用程序中使用Cloudinary存储和图像上传。在添加凭据并通过命令运行rails凭据:edit之后,我无意中按下了凭据上的控件C。现在,当我试图上传图像时,我得到了以下错误。这可能是因为我按下了control c,或者是其他API键错误。我怎样才能修复这个错误?

  • AndroidManifest。xml 在我上传文件的活动中,我在MediaManager中进行了初始化 我用它的uri上传了这个文件: 问题是我收到一个错误。我需要未签名上传的api密钥吗?

  • 我想编写一个函数,返回一个布尔值,指示具有指定public_id的图像是否已经存在于我的Cloudinary空间中。 我可以使用以下代码将结果记录到控制台: 但是,我想将结果布尔值传递给另一个函数。使用返回语句会导致记录: 这与javascript Promises有关。不过,我似乎无法重组我的代码以使其正常工作。任何帮助都将不胜感激。

  • Jekyll Cloudinary Liquid tag jekyll-cloudinary is a Jekyll plugin adding a Liquid tag to ease the use of Cloudinary for responsive images in your Markdown/Kramdown posts. It builds the HTML for respon

  • 我刚刚开始学习cloudinary和node JS,我不确定为什么我无法覆盖api resources_by_标签返回的10个图像的默认限制。因为在node JS的文档中没有关于如何调用可选参数的示例(我至少可以找到),所以我很可能在API语法中有错误:

  • 嗨,我正在创建一个简单的注册表单与django框架和mongodb。以下是我的观点: 以下是我的模型: 下面是我的<code>表单。py</code> 以下是加载 SignUpview 回溯时收到的回溯值错误: 内部 39 中的文件“C:\程序文件\Python35\lib\site-packages\django\core\处理程序\exception.py”。响应 = get_response