【问题标题】:.env file undefined using require('dotenv').config();.env 文件未定义使用 require('dotenv').config();
【发布时间】:2020-01-31 06:44:08
【问题描述】:

无法让 dotenv 获取我的 .env 文件

这是我的文件结构:

├── app.js
├── node_modules
│   └── ...
├── package.json
├── routes
│   └── index.js
└── start.js
│   
└── .env 

这是我的 start.js:

require('dotenv').config();
console.log(process.env.MONGO_URI);
const mongoose = require('mongoose');


mongoose.connect(process.env.DATABASE, { useMongoClient: true });
mongoose.Promise = global.Promise;
mongoose.connection
  .on('connected', () => {
    console.log(`Mongoose connection open on ${process.env.DATABASE}`);
  })
  .on('error', (err) => {
    console.log(`Connection error: ${err.message}`);
  });

我的 .env 里面如下:

mongodb+srv://username:password@livewelldb-aqoul.mongodb.net/test?retryWrites=true&w=majority

不幸的是,在运行我的 node.js 应用程序时,我收到以下错误:

C:\Users\user\Desktop\project\node_modules\mongoose\lib\connection.js:520
    throw new MongooseError('The `uri` parameter to `openUri()` must be a ' +
    ^
MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.

发生这种情况是因为 dotenv 由于某种原因似乎无法找到我的 .env 文件。当我运行console.log(process.env.MONGO_URI); 时,我得到了未定义。

不知道为什么。大多数有此问题的人都有以下问题之一:

  • 他们不从根目录运行他们的程序
  • 他们的 .env 不在他们的根目录中
  • 他们的 .env 命名不正确,例如“config.env”
  • 他们的 .env 格式不是 UTF-8 格式

我没有任何这些问题。我不确定是什么原因造成的。

有什么想法吗?

【问题讨论】:

  • 仔细检查您的 .dotenv 文件以确保没有错字。如果一切正常,请尝试将“路径”添加到 dotenv 配置中,如下所示:require('dotenv').config({path: './'})
  • 无论出于何种原因,我都无法在移动设备上的 cmets 中换行。我的另一个建议是确保您在启动应用程序时位于项目根目录中。这是因为 dotenv 使用process.cwd() 来设置 dotenv 的路径。
  • 不幸的是,您的第一个建议没有帮助,正如我的 OP 中所述,我已经确保我在根目录中运行我的程序。
  • 你能发布你的整个 .env 文件吗?如果这就是全部,那么您实际上并没有声明您的环境变量。它应该看起来像... MONGO_URI=mongodb+srv://username:password@livewelld...
  • 这是我的完整 .env 文件,按照我尝试遵循的教程。我已经添加了 MONGO_URI= 部分,在 url 周围有和没有引号,它没有任何区别。仍然未定义。

标签: node.js mongodb dotenv


【解决方案1】:

请检查您的 .dotenv 文件名。

require('dotenv').config({path:'relative/path/to/your/.env'})

【讨论】:

  • 我在任何地方都没有.dotenv 文件,只有.env。我也看不到 dotenv 自述文件中对此类文件的任何引用。你的意思是.env?另外,我尝试了相对路径建议,它没有改变任何东西。
【解决方案2】:

在加载应用程序时在包中指定您的 .dotenv 文件名

require('dotenv').config({path: './.env'})

【讨论】:

  • 不幸的是,这并不能解决我的问题。 Jay Kariesch 昨天也提出了建议
猜你喜欢
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 2018-06-05
  • 2020-09-05
  • 2021-07-22
  • 1970-01-01
  • 2015-12-11
  • 2020-08-01
相关资源
最近更新 更多