温馨提示×

Node.js在CentOS中的数据库连接配置

小樊
41
2026-01-02 02:28:26
栏目: 编程语言

在 CentOS 上配置 Node.js 与数据库连接的实操指南

一 环境准备

  • 安装 Node.js(建议通过 NodeSource 仓库获取较新 LTS 版本,例如 16.x):
    • 安装仓库并安装:curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -;sudo yum install -y nodejs
    • 验证版本:node -v、npm -v
  • 安装数据库(示例为 MySQLMongoDB):
    • MySQL:sudo yum install -y mysql-server;sudo systemctl start mysqld;sudo systemctl enable mysqld
    • MongoDB:导入公钥并配置仓库后安装(示例为 4.4),然后启动与自启:sudo yum install -y mongodb-org;sudo systemctl start mongod;sudo systemctl enable mongod
  • 防火墙放行端口(示例:Node 服务 8080,MongoDB 27017):
    • 查看状态:systemctl status firewalld
    • 放行端口:firewall-cmd --zone=public --add-port=8080/tcp --permanent;firewall-cmd --zone=public --add-port=27017/tcp --permanent
    • 生效:firewall-cmd --reload

二 数据库初始化与权限

  • MySQL 初始化与账户授权:
    • 登录:mysql -u root -p
    • 建库建用户并授权:CREATE DATABASE mydatabase; CREATE USER ‘myuser’@‘localhost’ IDENTIFIED BY ‘mypassword’; GRANT ALL PRIVILEGES ON mydatabase.* TO ‘myuser’@‘localhost’; FLUSH PRIVILEGES;
  • MongoDB 基础验证(本机测试):
    • 命令行连接:mongo;执行 show dbs 查看默认库(如 admin、config、local),确认服务可用

三 Node.js 连接示例

  • 使用环境变量管理敏感信息(.env 示例):
    • DATABASE_HOST=localhost;DATABASE_USER=myuser;DATABASE_PASSWORD=mypassword;DATABASE_NAME=mydatabase
  • MySQL(mysql 包,回调风格):
    • 安装驱动:npm install mysql dotenv
    • 代码示例:
      • const mysql = require(‘mysql’); const dotenv = require(‘dotenv’); dotenv.config();
      • const conn = mysql.createConnection({ host: process.env.DATABASE_HOST, user: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_NAME });
      • conn.connect(err => { if (err) throw err; console.log(‘MySQL connected’); });
      • // … your queries
      • conn.end();
  • PostgreSQL(pg 包,客户端方式):
    • 安装驱动:npm install pg dotenv
    • 代码示例:
      • const { Client } = require(‘pg’); const dotenv = require(‘dotenv’); dotenv.config();
      • const client = new Client({ user: process.env.DATABASE_USER, host: process.env.DATABASE_HOST, database: process.env.DATABASE_NAME, password: process.env.DATABASE_PASSWORD, port: 5432 });
      • await client.connect(); console.log(‘PostgreSQL connected’);
      • // … your queries
      • await client.end();
  • MongoDB(mongodb 包,官方驱动):
    • 安装驱动:npm install mongodb dotenv
    • 代码示例:
      • const { MongoClient } = require(‘mongodb’); const dotenv = require(‘dotenv’); dotenv.config();
      • const uri = ‘mongodb://localhost:27017’; const client = new MongoClient(uri);
      • await client.connect(); console.log(‘MongoDB connected’);
      • const db = client.db(‘mydatabase’); const col = db.collection(‘documents’);
      • await col.insertOne({ name: ‘Alice’, age: 25 }); console.log(‘Inserted:’, res.insertedId);
      • await client.close();

四 安全与性能建议

  • 使用 环境变量 或配置中心管理数据库凭据,避免硬编码;为不同环境(开发/测试/生产)使用独立配置
  • 启用 连接池(如 mysql 的 createPool、pg 的 Pool)以复用连接、提升并发性能与稳定性
  • 限制数据库访问来源:仅允许应用服务器 IP 访问数据库端口;必要时开启 TLS/SSL 加密传输
  • 最小权限原则:数据库账户仅授予目标库/表的必要权限;避免使用 root 远程连接
  • 防火墙与端口:仅放行必要端口;变更后执行 firewall-cmd --reload 使规则生效

五 常见问题排查

  • 服务未启动:systemctl status mysqld/mongod 查看状态与日志,必要时 sudo systemctl restart mysqld/mongod
  • 端口未放行或被占用:ss -tulnp | grep 端口;firewall-cmd --query-port=端口/tcp;必要时调整 firewalld 规则并重载
  • 远程连接被拒:核对数据库绑定地址(如 MySQL 的 bind-address)、用户主机限制(如 ‘myuser’@‘%’)、云安全组/本机防火墙
  • 认证失败:确认用户名、密码、库名、端口与驱动版本匹配;MongoDB 注意 SRV/普通 URI 写法差异
  • 连接泄漏:确保 query/request 结束后调用 release/end/close;生产环境务必使用连接池并设置合理的最大连接数与超时

0