正确使用 DOTENV

Using DOTENV correctly

我有一个 db.js 这样的文件

import "dotenv/config";

const devConfig = `"${process.env.PG_USER}://${process.env.PG_USER}:${process.env.PG_PASSWORD}@${process.env.PG_HOST}:${process.env.PG_PORT}/${process.env.PG_DATABASE}"`;

const prodConfig = process.env.DATABASE_URL;

const dbConnection =
  process.env.NODE_ENV === "production" ? prodConfig : devConfig;

console.log(dbConnection);

export default dbConnection;

console.log 函数正确输出我需要的字符串(在我的例子中是 "postgres://postgres:learn@sql@localhost:5432/EPL"

但是,当我尝试在另一个文件中使用导入 dbConnection 变量时,我得到的只是 "undefined://undefined:undefined@undefined:undefined/undefined".

我尝试使用 dbConnection 变量的文件代码如下所示。

import pgPromise from "pg-promise";
import dbConnection from "../db.js";

const pgp = pgPromise({});
const db = pgp(dbConnection);
console.log(dbConnection);

我做错了什么?

你能试试这个吗

import dotenv from "dotenv";
//Write this as early as possible in your application
//This will use the local .env file.
dotenv.config(); 

默认情况下,dotenvcurrent working directory 中查找 .env 文件,即 运行 安装您的应用程序时所在的目录...

Path
Default: path.resolve(process.cwd(), '.env')

如果你 运行 node query.js,那么你的 CWD 就是 query.js 所在的任何目录,dotenv 将在 中查找 .env ]那个目录.

如果你想强制 dotenv 在与你的 db.js 文件相同的目录中查找,ES 模块版本如下所示...

// db.js
import { dirname, resolve } from "path";
import { fileURLToPath } from "url";
import dotenv from "dotenv";

dotenv.config({
  path: resolve(dirname(fileURLToPath(import.meta.url)), ".env"),
});

// create and export your connection strings...

如果你没有使用 ES 模块,它看起来会更像这样

const { resolve } = require("path");
require("dotenv").config({ path: resolve(__dirname, ".env") });