dotenv |在配置文件中被调用时,process.env.NAME不起作用

时间:2019-06-13 14:03:53

标签: node.js express environment-variables

我正在尝试将.env值包装在配置文件中。在另一个文件(即server.js)上调用时,它正在工作。但是在undefined文件内调用时返回config.js

文件夹结构

root
-- server
---- server.js
-- .env
-- config.js

.env

MAIL_USER = email@gmail.com
PORT = 8000

config.js

const mailUser = process.env.MAIL_USER;
const PORT = process.env.PORT;

module.exports = {
mailUser,
PORT
}

server.js

import dotenv from "dotenv";
dotenv.config();
import app from "./express";
import mongoose from "mongoose";
import config from "../config";

... // some other settings are defined here // ...

app.listen(3000, err => {
  if (err) {
    console.log(err);
  }  
  console.log(`Server running on port ${config.PORT}`);
  console.log(process.env.MAIL_USER);
  console.log(mailUser);
});

控制台上的输出

email@gmail.com
undefined

process.env.MAIL_USER文件内部调用undefinedconfig.jsubuntu:16.04会出现什么问题?

5 个答案:

答案 0 :(得分:0)

我建议您尝试从“ dotenv”导入dotenv,然后尝试使用dotenv.config() 我如何在导入中使用dotenv?

https://www.npmjs.com/package/dotenv

答案 1 :(得分:0)

您正在dotenv文件中加载server.js扩展名,这就是为什么您的ENV变量在config.js中不可见的原因,请像您一样尝试在config.js处加载它们:

import dotenv from "dotenv";
dotenv.config();

如之前所建议的,您可以运行脚本而无需在代码中导入dotenv lib:

node -r dotenv/config server.js

答案 2 :(得分:0)

我想,如果您只想保留config.js来导出这些属性,则必须为 dotenv dotenv.config()添加导入。然后,您可以直接从该文件中调用导出的值,而无需在server.js文件中重新导入dotenv。

答案 3 :(得分:0)

就我而言,重新启动服务器可以解决问题。

此外,请记住,您正在导出config.js文件中的两个变量,但只使用了该文件中的PORT变量。

答案 4 :(得分:0)

import dotenv/config; 而不是 dotenv

注意:您不需要调用 dotenv.config() 并且必须使用此方法通过命令行或环境变量传递选项

来源:https://www.npmjs.com/package/dotenv#how-do-i-use-dotenv-with-import-