首页 > 解决方案 > 如何在 Nodejs 中使用环境变量作为数据库密码?

问题描述

我正在尝试使用 .env 文件隐藏我的数据库密码。但似乎编译器无法识别密码在哪里..

您可以看到环境变量 PWD,它是用于数据库密码的。 .env代码。

PWD = 0000
SECRET  = mySecret

在 server.js 中,您可以看到我使用 dotenv 模块并设置配置。

server.js代码。

require("dotenv").config();

const express = require("express");
const app = express();
const port = process.env.PORT || 3000;

const expressSanitizer = require("express-sanitizer");
const router = require("./Routes/router");

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use(expressSanitizer());
app.use(router);

app.listen(port, () => {
  console.log(`listening to port ${port}`);
});

最后,这里的问题..你可以看到论点,process.env.PWD. 我记录了它以检查它实际上是什么。它不是0000,而是D://github/practice只是项目目录路径..

我不明白发生了什么!我也能看到

console.log(process.env.PWD);工作两次。当我跑的时候server.js

router.js代码。

const { Sequelize } = require("sequelize");

console.log(process.env.PWD);

const sequelize = new Sequelize("vehicle", "root", process.env.PWD, {
  host: "localhost",
  port: "3306",
  dialect: "mysql",
  logging: false,
  define: {
    createdAt: false,
    timestamps: false,
  },
});

module.exports = sequelize;

以下是我运行代码时的错误。

AccessDeniedError [SequelizeAccessDeniedError]: Access denied for user 'root'@'localhost' (using password: YES)
    at ConnectionManager.connect (E:\github\practice\node_modules\sequelize\lib\dialects\mysql\connection-manager.js:118:17)
    at processTicksAndRejections (internal/process/task_queues.js:85:5) {
  name: 'SequelizeAccessDeniedError',
  parent: Error: Access denied for user 'root'@'localhost' (using password: YES)
      at Packet.asError (E:\github\practice\node_modules\mysql2\lib\packets\packet.js:712:17)
      at ClientHandshake.execute (E:\github\practice\node_modules\mysql2\lib\commands\command.js:28:26)
      at Connection.handlePacket (E:\github\practice\node_modules\mysql2\lib\connection.js:425:32)
      at PacketParser.onPacket (E:\github\practice\node_modules\mysql2\lib\connection.js:75:12)
      at PacketParser.executeStart (E:\github\practice\node_modules\mysql2\lib\packet_parser.js:75:16)
      at Socket.<anonymous> (E:\github\practice\node_modules\mysql2\lib\connection.js:82:25)
      at Socket.emit (events.js:209:13)
      at addChunk (_stream_readable.js:305:12)
      at readableAddChunk (_stream_readable.js:286:11)
      at Socket.Readable.push (_stream_readable.js:220:10) {
    code: 'ER_ACCESS_DENIED_ERROR',
    errno: 1045,
    sqlState: '28000',
    sqlMessage: "Access denied for user 'root'@'localhost' (using password: YES)"
  },
  original: Error: Access denied for user 'root'@'localhost' (using password: YES)
      at Packet.asError (E:\github\practice\node_modules\mysql2\lib\packets\packet.js:712:17)
      at ClientHandshake.execute (E:\github\practice\node_modules\mysql2\lib\commands\command.js:28:26)
      at Connection.handlePacket (E:\github\practice\node_modules\mysql2\lib\connection.js:425:32)
      at PacketParser.onPacket (E:\github\practice\node_modules\mysql2\lib\connection.js:75:12)
      at PacketParser.executeStart (E:\github\practice\node_modules\mysql2\lib\packet_parser.js:75:16)
      at Socket.<anonymous> (E:\github\practice\node_modules\mysql2\lib\connection.js:82:25)
      at Socket.emit (events.js:209:13)
      at addChunk (_stream_readable.js:305:12)
      at readableAddChunk (_stream_readable.js:286:11)
      at Socket.Readable.push (_stream_readable.js:220:10) {
    code: 'ER_ACCESS_DENIED_ERROR',
    errno: 1045,
    sqlState: '28000',
    sqlMessage: "Access denied for user 'root'@'localhost' (using password: YES)"
  }
}

另外,如果有更好的隐藏数据库密码的解决方案,请告诉我..!感谢您阅读我的问题!

标签: node.jsexpresssequelize.js

解决方案


你错过了一个非常重要和关键的代码行

dotenv.config({ path: "YOUR-PATH-TO-.ENV-FILE" });

就在你之后

require("dotenv").config();

您需要根据您共享的代码为 dotenv 提供包含 ENV_VARs 的文件的路径,您可以通过 2 种方式做到这一点

选项1

const dotenv = require("dotenv");
dotenv.config({ path: "YOUR-PATH-TO-.ENV-FILE" });

选项 2

require("dotenv").config({ path: "YOUR-PATH-TO-.ENV-FILE" );

推荐阅读