如果此问题未包含正确的标签,请提前表示歉意。
我正在尝试在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变量后得到的浏览器消息。
的
在此提前感谢任何帮助。
--迪恩
2条答案
按热度按时间fxnxkyjh1#
每当我在我的应用程序中使用dotenv时,都会给它一个文件名。就像这样:
字符串
似乎是合乎逻辑的,不给文件名的结果在错误你得到。
有点想知道为什么选择使用db.config.js?为什么不在创建连接时直接读取值:
型
在我看来,有一个额外的模块有点多余。
s4chpxco2#
事实证明,我一直遵循的构建此API的教程已经过时了。and I started开始to look towards另一个tutorial教程.
原来的教程使用的是mysql npm包,而不是更新后的mysql2 npm包。我并不是说这就是环境变量不起作用的原因,但我所遵循的较新教程中的代码似乎与使用mysql2连接MySQL的方法几乎相同。