Node.js项目中dotenv无法读取.env文件内API密钥问题
配置错误原因
你的配置存在两处核心问题,直接导致环境变量读取失败:
dotenv.config()调用时机错误。代码中先执行了process.env.MONGO_URL读取、mongoose.connect()数据库连接、端口常量定义等依赖环境变量的逻辑,之后才调用dotenv.config()加载.env文件,此时前面的环境变量读取操作已经执行完成,无法获取到.env中存储的WEATHER_API_KEY值。- .env文件键值对写法不规范。你当前写的
WEATHER_API_KEY = XXXXXXXXXXXX在等号两侧加了多余空格,dotenv解析时会将空格计入键名或值的内容,最终无法匹配到WEATHER_API_KEY这个键,读取到的值也可能携带前后空格导致鉴权失败。
修复步骤
- 调整
dotenv.config()的调用位置,放到所有依赖process.env的逻辑之前,也就是import语句结束后第一行执行配置加载,修正后的代码开头如下:
import express from "express"; import cors from "cors"; import mongoose from "mongoose"; import crypto from "crypto"; import bcrypt from "bcrypt"; import request from "request"; import dotenv from "dotenv"; // 最先加载.env配置,保证后续所有环境变量读取正常 dotenv.config(); const mongoUrl = process.env.MONGO_URL || "mongodb://localhost/project-mongo"; mongoose.connect(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true }); mongoose.Promise = Promise; const port = process.env.PORT || 8080; const app = express();
- 修改.env文件内的配置写法,去掉等号两侧的空格,不要额外给值加引号(除非密钥本身包含引号),正确写法:
WEATHER_API_KEY=XXXXXXXXXXXX
- 替换接口请求中硬编码的密钥,改用环境变量读取:
const requesturl = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${process.env.WEATHER_API_KEY}`;
如果调整后仍无法读取,检查.env文件是否放在执行node启动命令的项目根目录下,不要存放在src等子文件夹中。
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

