Node.js-无法在mysql2中加载环境变量

时间:2020-10-04 07:50:06

标签: mysql node.js api npm

我正在使用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加载env变量,并在我的条目文件中将其初始化为:

require('dotenv').config();

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

作为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",
});