我有一个使用 Express 后端 API 的 NextJs 应用程序。 我正在尝试将用户头像上传到 cloudinary 中的文件夹。 我有 cloudinar.js 文件和我从 userController 调用的 cloudinary.config 文件。 如果我直接在 cloudinary.config 文件中输入 cloud_name、api_key 和 api_secret,则它可以正常工作,但如果我将变量移至 .env 文件,并使用 process.env.CLOUD_NAME 调用它们,则会出现以下错误说我必须提供 cloud_name:
Error: Must supply api_key
[0] at ensureOption (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\ensureOption.js:19:13)
[0] at Object.sign_request (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\index.js:1164:16)
[0] at Object.process_request_params (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\index.js:1214:22)
[0] at call_api (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\uploader.js:474:18)
[0] at Object.upload (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\uploader.js:53:10)
[0] at Object.upload (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\index.js:1411:21)
[0] at file:///C:/Users/judo2/Documents/dev/my-sites/the_mat_house/mat_scout_nextjs/server/controllers/userController.js:262:46
[0] at file:///C:/Users/judo2/Documents/dev/my-sites/the_mat_house/mat_scout_nextjs/server/middleware/asyncHandler.js:2:19
[0] at Layer.handle [as handle_request] (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\express\lib\router\layer.js:95:5)
[0] at next (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\express\lib\router\route.js:149:13)
[0] Error: Must supply api_key
[0] at ensureOption (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\ensureOption.js:19:13)
[0] at Object.sign_request (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\index.js:1164:16)
[0] at Object.process_request_params (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\index.js:1214:22)
[0] at call_api (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\uploader.js:474:18)
[0] at Object.upload (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\uploader.js:53:10)
[0] at Object.upload (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\cloudinary\lib\utils\index.js:1411:21)
[0] at file:///C:/Users/judo2/Documents/dev/my-sites/the_mat_house/mat_scout_nextjs/server/controllers/userController.js:262:46
[0] at file:///C:/Users/judo2/Documents/dev/my-sites/the_mat_house/mat_scout_nextjs/server/middleware/asyncHandler.js:2:19
[0] at Layer.handle [as handle_request] (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\express\lib\router\layer.js:95:5)
[0] at next (C:\Users\judo2\Documents\dev\my-sites\the_mat_house\mat_scout_nextjs\node_modules\express\lib\router\route.js:149:13)
我尝试了 String(process.env.CLOUD_NAME) 并收到了 cloud_name 被禁用的错误,但同样,如果我将云名称直接输入到配置对象中,它就可以工作。
我的 .enf 文件可以工作,因为它从 .env 文件获取 MONGO_URI
我正在 server.js 文件中初始化 dotenv: 从“dotenv”导入 dotenv;
dotenv.config();
这是cloudinar.js 文件:
import { v2 as cloudinary } from "cloudinary";
// Configuration
cloudinary.config({
cloud_name: process.env.CLOUD_NAME,
api_key: process.env.CLOUD_KEY,
api_secret: process.env.CLOUD_SECRET, // Click 'View API Keys' above to copy your API secret
});
export default cloudinary;
这是 userController 中我称之为 cloudinary 的部分:
const result = await cloudinary.uploader.upload(image, {
folder: "products",
// width: 300,
// crop: "scale"
});
看起来这是一个范围问题,因此您应该能够通过在
cloudinar.js
中导入和配置 dotenv 来解决它