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

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这个键,读取到的值也可能携带前后空格导致鉴权失败。
修复步骤
  1. 调整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();
  1. 修改.env文件内的配置写法,去掉等号两侧的空格,不要额外给值加引号(除非密钥本身包含引号),正确写法:
WEATHER_API_KEY=XXXXXXXXXXXX
  1. 替换接口请求中硬编码的密钥,改用环境变量读取:
const requesturl = `https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=${process.env.WEATHER_API_KEY}`;

如果调整后仍无法读取,检查.env文件是否放在执行node启动命令的项目根目录下,不要存放在src等子文件夹中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:22:04