You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cloudinary配置中.env环境变量不生效,提示Must supply api_key

问题描述

我正在实现文件上传功能,使用Cloudinary存储文件,但遇到环境变量读取失败的问题,具体如下:

配置文件

cloudinary.js

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

.env(隐私信息已隐藏)

ACCESS_TOKEN=auth
CLOUD_NAME=huabwxiwssd
API_KEY=7*************2
API_SECRET=A**************-**********I

server.js(已配置dotenv)

const express = require("express");
const app = express();
const cors = require("cors");
const route = require("./routes/ROUTES");
const db = require("./config/connectDB");
require("dotenv").config(); // 此处配置dotenv
const PORT = process.env.PORT || 5000;

// 连接数据库
db.connect();

// 解析请求JSON
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// 启用CORS
app.use(cors());

// 初始化路由
route(app);

app.listen(PORT, () => {
  console.log(`Example app listening at http://localhost:${PORT}`);
});

问题

运行时始终报错Must supply api_key,尝试过给.env变量加双引号等方法无效,只有在cloudinary.config中硬编码密钥才能成功上传,但不想暴露密钥,求解决办法。


解决办法

按以下步骤逐一排查:

  1. 把dotenv加载移到最优先位置
    将require("dotenv").config();放到server.js的第一行,确保所有依赖环境变量的模块(比如cloudinary、数据库连接)加载前,环境变量已经被读取:
require("dotenv").config(); // 移至代码最顶部
const express = require("express");
const app = express();
// ... 后续代码不变

如果你的cloudinary.js被其他模块(比如connectDB)提前引入,必须保证dotenv在这些模块加载前执行。

  1. 检查.env文件的位置
    确认.env文件放在项目根目录(和server.js同级)。如果放在子文件夹里,需要在dotenv配置中指定路径:
// 示例:.env在config文件夹下时的写法
require("dotenv").config({ path: "./config/.env" });
  1. 规范.env文件的语法
  • 变量名和值之间不要加空格,比如API_KEY=7xxx是正确的,API_KEY = 7xxx会导致读取到带空格的无效值;
  • 不要给值加引号,比如API_KEY="7xxx"会让process.env.API_KEY包含双引号,导致Cloudinary识别失败。
  1. 验证环境变量是否被读取
    在server.js中添加打印语句,确认环境变量是否加载成功:
require("dotenv").config();
console.log("API_KEY:", process.env.API_KEY); // 查看控制台输出是否为预期值
const express = require("express");
// ...

如果输出undefined,说明dotenv没读到.env文件,回到步骤2检查位置;如果有值,说明问题出在cloudinary.js的加载时机,需调整引入顺序。

  1. 检查Cloudinary模块的正确使用
    确保cloudinary.js中引入的是v2版本(当前推荐版本),并正确导出供其他模块使用:
const cloudinary = require('cloudinary').v2;
cloudinary.config({ 
  cloud_name: process.env.CLOUD_NAME, 
  api_key: process.env.API_KEY, 
  api_secret: process.env.API_SECRET
});
module.exports = cloudinary;
  1. 重启服务器
    修改.env或dotenv配置后,必须重启Node服务器,否则新的环境变量不会生效。

内容的提问来源于stack exchange,提问作者LXT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:35:23