node.js - 如何在 Nodejs 中使用环境变量作为数据库密码?

标签 node.js express sequelize.js

我正在尝试使用 .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)"
  }
}
另外,如果有更好的隐藏数据库密码的解决方案,请告诉我..!
感谢您阅读我的问题!

最佳答案

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

dotenv.config({ path: "YOUR-PATH-TO-.ENV-FILE" });
就在你之后
require("dotenv").config();
您需要为 dotenv 提供包含 ENV_VARs 的文件的路径
根据您共享的代码,您可以通过两种方式进行
选项1
const dotenv = require("dotenv");
dotenv.config({ path: "YOUR-PATH-TO-.ENV-FILE" });
选项 2
require("dotenv").config({ path: "YOUR-PATH-TO-.ENV-FILE" );

关于node.js - 如何在 Nodejs 中使用环境变量作为数据库密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65896414/

相关文章:

javascript - 使用 Express 创建 Node js 应用程序时,如何默认在所有 Controller 中注入(inject)模型、服务

javascript - 如何使用express-handlebars向用户显示MySQL "result"对象?

javascript - jQuery.post() 发送电子邮件,但在没有服务器刷新的情况下无法到达 .done()/.fail()/.always()

javascript - 返回数据到index.js Node express

javascript - 生成自定义唯一 id 并在使用 MySQL 创建新用户和 Sequelize 之前检查它是否不存在

node.js - Sequelize - 如何设置关联、保存实体并返回保存的实体和关联实体

node.js - Async.foreach 迭代强制停止,直到第一次迭代执行

javascript - 如何在 Node.js 中使用 htpasswd 验证请求

javascript - 如何处理依赖于多个其他异步函数的异步函数

java - 为什么我的 Spring Data JPA 查询比 Node.JS + oracledb 慢 8 倍?