【问题标题】:How to hide connection details for mysql database in node.js?如何在 node.js 中隐藏 mysql 数据库的连接详细信息?
【发布时间】:2022-01-12 20:23:27
【问题描述】:

我刚开始在 node.js 中使用 mysql,我正在设置我的 app.js 项目,我试图隐藏我的连接详细信息,例如我的 ip、用户名、密码和数据库名称。我不知道如何隐藏我的连接详细信息,所以这就是我在这里的原因。

我尝试在我的.profile 中添加详细信息,但我不断收到身份验证错误。但是,当我在我的常规 app.js 文件中包含这些相同的连接详细信息时,它可以工作并连接到数据库。

这是我的 app.js 文件中显示的内容:

var connection = mysql.createConnection({
              host     : 'my.ip.address.info',
              user     : 'username',
              password : 'password',
              database : 'databaseName'
            });
console.log('Connected');
connection.connect();

我只想隐藏我的连接详细信息,以便将来我的网站上线时不会被窥探。我知道将这些连接详细信息留在我的 app.js 文件中是不正确的做法,因此我寻求帮助!

【问题讨论】:

    标签: mysql node.js


    【解决方案1】:

    您可以创建一个.env 文件来设置环境变量,并使用dotenv 包将它们显示在您的process.env 中。

    https://github.com/motdotla/dotenv#readme

    创建一个文件并将其命名为 .env 并设置您的变量

    host=my-ip-address-info,
    user=username,
    password=password,
    database=databaseName
    

    然后你可以像这样访问它们:

    var connection = mysql.createConnection({
              host: process.env.host
              user: process.env.username
              password: process.env.password,
              database: process.env.database
            });
    

    你必须用类似的东西来启动你的应用程序

    node -r dotenv/config your_script.js

    或将以下内容添加到您的输入脚本的顶部

    require('dotenv').config();

    我更喜欢第一种方法,因为这些环境变量应该由您的主机提供商设置,因此您的代码中不需要 require 语句。

    【讨论】:

    • 谢谢,稍后会尝试一下,但是我的主机提供商如何做到这一点?我正在使用数字海洋,他们并没有真正提供任何支持,哈哈另外,我将我的 mySQL 数据库与我将用来创建我的网络应用程序的网络服务器完全分开。谢谢!
    • 我不使用 DO,但这里有一个关于“数字海洋环境变量”digitalocean.com/community/tutorials/… 的快速谷歌搜索。如果您将它们分开(好主意),然后创建一个 connect 函数(或类似的东西),您可以在其中传递参数。
    • 它似乎工作正常,但不完全大声笑我不断收到错误:错误:getaddrinfo ENOTFOUND ip-addr-of-my-db, ip-addr-of-my-db,:3306在 GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
    • 我一直试图解决这个问题,但没有成功,但是当我尝试您的方法时,它会引发该错误。我似乎找不到解决方案:(
    • 原来不需要改成mysql.createPool,而是改了connection.connect();行到 connection.connect(function(err) { });非常感谢您的原始回答!好开心!!!
    【解决方案2】:

    我使用dotenv

    yarn add dotenv
    

    在项目的根目录下创建一个 .env 文件

    host=my.ip.address.info
    user=username
    password=password
    database=databaseName
    

    然后从你的代码中

    require('dotenv').config();
    
    let host = process.env.host;
    

    不要将 .env 文件提交到公共仓库。

    【讨论】:

    • 它似乎工作正常,但不完全大声笑我不断收到错误:错误:getaddrinfo ENOTFOUND ip-addr-of-my-server-db, ip-addr-of-my-server- db,:3306 在 GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26
    • 我一直试图解决这个问题,但没有成功,但是当我尝试您的方法时,它会引发该错误。我似乎找不到解决方案:(
    • 是的,这没有帮助,我也检查了这个。我想我将不得不公开我的连接详细信息,因为我在过去 3 天里一直在尝试解决这个问题:/
    • 哈!所以我想通了,或者说想出了一个解决方法。我不知道为什么,但我改变了 mysql.createConnection();到 mysql.createPool();
    猜你喜欢
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2015-08-28
    相关资源
    最近更新 更多