【问题标题】:Nodejs - unable to load environment variable in mysql2Nodejs - 无法在mysql2中加载环境变量
【发布时间】:2021-01-19 08:30:41
【问题描述】:

我正在使用 mysql2 包将节点与 MySQL 连接,并且我正在使用 .env 文件来存储我的用户名和密码。但是当我在我的配置中使用它来连接 MySql 时,它不会加载。每当我使用 Postman 到达端点时,它都会引发以下错误。

Error: Access denied for user 'undefined'@'localhost' (using password: YES)

下面是我的代码:

const express = require("express");
const router = express.Router();
const mysql = require("mysql2");

const connection = mysql.createPool({
    user: `${process.env.DB_USERNAME}`,
    host: "localhost",
    password: `${process.env.DB_PASSWORD}`,
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0,
    database: "issue",
});

我正在使用 dotenv 加载环境变量并在我的入口文件中初始化为:

require('dotenv').config();

我做错了什么?

【问题讨论】:

  • 你在哪里定义你的.env文件?
  • 我在根文件夹中定义了我的 .env 文件。
  • 你的入口文件也在根目录下吗?
  • 是的,它在根文件夹中。

标签: mysql node.js api npm


【解决方案1】:

作为 JavaScript 强制类型的副作用,process.env.foo 将导致 "undefined" 如果它是 undefined 并在字符串中使用。

您的 dotenv 配置文件中存在拼写错误,或者您使用 dotenv 时存在其他问题。

我会推荐更多的防御性编码,以便在发生这种情况时提供更好的错误信息。 (以下代码未经测试,但您一定会明白的。)

const express = require("express");
const router = express.Router();
const mysql = require("mysql2");

const dbUsername = process.env.DB_USERNAME;
const dbPassword = process.env.DB_PASSWORD;

if (!dbUsername) {
    throw new Error('DB_USERNAME environment variables must be set');
}

if (!dbPassword) {
            throw new Error('DB_PASSWORD environment variables must be set');
}

const connection = mysql.createPool({
    user: dbUsername,
    host: "localhost",
    password: dbPassword,
    waitForConnections: true,
    connectionLimit: 10,
    queueLimit: 0,
    database: "issue",
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 2021-07-11
    • 2015-09-02
    • 2015-07-09
    • 2019-08-20
    • 2019-01-27
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多