Express生产环境中configObject指定key返回undefined问题
问题:生产环境中
configObject[process.env.NODE_ENV]返回undefined 开发Express应用并做生产环境性能优化时,编写了包含development、production、test三个键的配置对象,开发环境使用正常,但生产环境中:
process.env.NODE_ENV的值显示为productionconfigObject明确存在production键- 但
configObject[process.env.NODE_ENV]返回undefined
配置代码
import bunyan from "bunyan"; const loggers = { development: () => bunyan.createLogger({name: "development", level: "debug"}), production: () => bunyan.createLogger({name: "production", level: "info"}), test: () => bunyan.createLogger({name: "test", level: "fatal"}), } const config = { development: { log: loggers.development }, production: { log: loggers.production }, test: { log: loggers.test } }; export default config;
使用代码
import configObject from "./config.js"; const config = configObject[process.env.NODE_ENV || "development"]; const log = config.log();
生产环境调试输出
production { development: { log: [Function: development] }, production: { log: [Function: production] }, test: { log: [Function: test] } } undefined
原因分析
从调试输出能看出,process.env.NODE_ENV的实际值带有前后空白(换行/空格),导致取值时用的是带空白的字符串,和configObject中定义的无空白production键不匹配,因此返回undefined。
这种情况一般是设置环境变量时不小心添加了多余空格或换行,比如执行export NODE_ENV=production (末尾多了空格)。
解决方法
- 清理环境变量值的空白:使用
process.env.NODE_ENV时添加trim()处理,去除前后空白:
import configObject from "./config.js"; const env = (process.env.NODE_ENV || "development").trim(); const config = configObject[env]; const log = config.log();
- 修正环境变量设置:确保设置
NODE_ENV时没有多余空格,比如:- Linux/macOS:
export NODE_ENV=production - Windows(命令行):
set NODE_ENV=production
- Linux/macOS:
内容的提问来源于stack exchange,提问作者Julianvv
相关产品推荐
相关产品推荐

