NodeJS 无法访问.env文件

bfrts1fy  于 2023-10-17  发布在  Node.js
关注(0)|答案(2)|浏览(140)

我无法从server.js server.js以外的任何地方访问.env文件,我试图在db.js db.js和db.js config.js中访问它
我试过了,它的工作,但任何更好的和简单的方法吗?.

import dotenv from "dotenv";
import { fileURLToPath } from 'url';
import path from "path";

const __filename = fileURLToPath(import.meta.url);

const envPath = path.resolve(path.dirname(__filename), "../../backend/.env");

dotenv.config({ path: envPath });

var password = process.env.password;

console.log(password);
ac1kyiln

ac1kyiln1#

您不需要在每个文件中设置dotenv。在server.js中导入app之前,必须执行dotenv.config()。例如:
这将工作:

const dotenv = require("dotenv");
// Needs to executed first
dotenv.config();

// Then import other files
const { db } = require("./internal/db");


console.log(db);
7rtdyuoh

7rtdyuoh2#

您提供的代码是一种合理的方法,可以在您与特定的.env文件不在同一目录时从该文件加载环境变量。但是,您可以进行一些改进来增强其可读性和可维护性。
1.使用__dirname:您可以直接使用__dirname获取当前模块的目录,而不是使用path.resolve(path.dirname(__filename), ...)构建envPath。这是Node.js提供的一个内置属性。

import dotenv from "dotenv";
import { fileURLToPath } from 'url';
import path from "path";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const envPath = path.resolve(__dirname, "../../backend/.env");

dotenv.config({ path: envPath });

var password = process.env.password;

console.log(password);

使用__dirname使其更明确,更容易理解。
1.错误处理:从文件加载环境变量时处理潜在错误是一个很好的做法。如果.env文件不存在,或者阅读它时出现问题,您应该捕获这些错误并进行适当的处理。

import dotenv from "dotenv";
import { fileURLToPath } from 'url';
import path from "path";
import fs from "fs";

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const envPath = path.resolve(__dirname, "../../backend/.env");

// Check if the .env file exists before trying to load it
if (fs.existsSync(envPath)) {
  dotenv.config({ path: envPath });
  var password = process.env.password;
  console.log(password);
} else {
  console.error(".env file not found");
}

这可以确保您的代码正常处理缺失的.env文件。
通过进行这些改进,您的代码将更加有组织,并且能够更好地应对潜在的问题。

相关问题