在MySQL连接使用环境变量时获取ENOOTFOUND错误

gmxoilav  于 2023-08-02  发布在  Mysql
关注(0)|答案(2)|浏览(114)

如果此问题未包含正确的标签,请提前表示歉意。
我正在尝试在NodeJS中使用MySQL构建CRUD API。我想从环境变量中提取我的DB凭据。现在我正试着让这个在我的本地环境中工作。但最终我会将其部署到A2 Hosting上托管的生产环境中
下面是我连接到数据库的工作流程。
首先,如果我在db.config.js文件中硬编码我的凭证,一切都很正常,如下所示(注意:我编辑了用户、密码和数据库值)

module.exports = {
    HOST: "localhost",
    USER: "{username}",
    PASSWORD: "{password}",
    DB: "{database}"
  };

字符串
我的数据库连接如下

const mysql = require("mysql");
const dbConfig = require("../config/db.config.js");

require('dotenv').config()

var connection = mysql.createPool({
  host: dbConfig.HOST,
  user: dbConfig.USER,
  password: dbConfig.PASSWORD,
  database: dbConfig.DB
});

module.exports = connection;


一切工作正常,因为我可以访问的路线,做我的crud的例子,下面是得到的路线,以显示书籍
x1c 0d1x的数据
I Than继续在应用程序的根目录中创建了一个.env文件。我把我的证件放在那里
.env文件(实际值再次编辑)

HOST='localhost',
  USER='{username}',
  PASSWORD='{password}',
  DB='{database}'


当我尝试将db.config.js值替换为环境值时,当我尝试导航到API/tutorials get route时,会收到ENOTFOUND消息
db.config.js(修改为使用env变量)

import('dotenv').config()

module.exports = {
    HOST: process.env.HOST,
    USER: process.env.USER,
    PASSWORD: process.env.PASSWORD,
    DB: process.env.DB
  };


这是我在尝试使用env变量后得到的浏览器消息。



在此提前感谢任何帮助。
--迪恩

fxnxkyjh

fxnxkyjh1#

每当我在我的应用程序中使用dotenv时,都会给它一个文件名。就像这样:

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

字符串
似乎是合乎逻辑的,不给文件名的结果在错误你得到。
有点想知道为什么选择使用db.config.js?为什么不在创建连接时直接读取值:

var connection = mysql.createPool({
  host: process.env.HOST,
  user: process.env.USER,
  password: process.env.PASSWORD,
  database: process.env.DB
});


在我看来,有一个额外的模块有点多余。

s4chpxco

s4chpxco2#

事实证明,我一直遵循的构建此API的教程已经过时了。and I started开始to look towards另一个tutorial教程.
原来的教程使用的是mysql npm包,而不是更新后的mysql2 npm包。我并不是说这就是环境变量不起作用的原因,但我所遵循的较新教程中的代码似乎与使用mysql2连接MySQL的方法几乎相同。

相关问题