🎉 Sealos 首充折扣,限时返场!最高立返 10000,活动日期 4月22日-4月28日
Sealos Logo

Node.js

在 Sealos DevBox 中使用 Node.js 连接 MySQL 数据库的完整指南

本教程将详细介绍如何在 Sealos DevBox 项目中使用 Node.js 连接和操作 MySQL 数据库。

准备工作

在开始之前,请确保:

安装依赖

在 Cursor 终端中运行以下命令安装所需的依赖包:

npm install mysql2 dotenv

这将安装两个核心包:

  • mysql2:高性能的 Node.js MySQL 驱动程序,提供了异步操作和连接池等现代特性
  • dotenv:轻量级的环境变量管理工具,用于从 .env 文件中加载配置信息

配置数据库连接

设置环境变量

首先,在项目根目录创建 .env 文件,配置数据库连接信息:

.env
DB_HOST=your_database_host
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=your_database_name
DB_PORT=3306

请将上述配置项替换为您在 Sealos 数据库应用中获取的实际 MySQL 连接参数。

创建数据库连接配置

接下来,创建 db.js 文件来管理数据库连接:

db.js
const mysql = require('mysql2/promise');
require('dotenv').config();
 
const pool = mysql.createPool({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  port: process.env.DB_PORT,
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});
 
module.exports = pool;

这里我们使用连接池来管理数据库连接,它可以:

  • 自动管理多个数据库连接
  • 提高并发处理能力
  • 优化连接资源的使用效率

实现数据库操作

创建 dbOperations.js 文件,实现基本的数据库操作函数:

dbOperations.js
const pool = require('./db');
 
async function createTable() {
  const createTableQuery = `
    CREATE TABLE IF NOT EXISTS employees (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(100) NOT NULL,
      position VARCHAR(100) NOT NULL
    )
  `;
  await pool.query(createTableQuery);
  console.log('Table created successfully');
}
 
async function insertEmployee(name, position) {
  const insertQuery = 'INSERT INTO employees (name, position) VALUES (?, ?)';
  const [result] = await pool.query(insertQuery, [name, position]);
  console.log('Employee inserted:', result.insertId);
  return result.insertId;
}
 
async function updateEmployee(id, name, position) {
  const updateQuery = 'UPDATE employees SET name = ?, position = ? WHERE id = ?';
  const [result] = await pool.query(updateQuery, [name, position, id]);
  console.log('Employee updated:', result.affectedRows > 0);
  return result.affectedRows > 0;
}
 
async function getAllEmployees() {
  const selectQuery = 'SELECT * FROM employees';
  const [rows] = await pool.query(selectQuery);
  console.log('All employees:', rows);
  return rows;
}
 
async function deleteEmployee(id) {
  const deleteQuery = 'DELETE FROM employees WHERE id = ?';
  const [result] = await pool.query(deleteQuery, [id]);
  console.log('Employee deleted:', result.affectedRows > 0);
  return result.affectedRows > 0;
}
 
module.exports = {
  createTable,
  insertEmployee,
  updateEmployee,
  getAllEmployees,
  deleteEmployee
};

编写测试程序

最后,创建 main.js 文件来测试所有数据库操作:

main.js
const {
  createTable,
  insertEmployee,
  updateEmployee,
  getAllEmployees,
  deleteEmployee
} = require('./dbOperations');
 
async function main() {
  try {
    await createTable();
    
    const johnId = await insertEmployee('John Doe', 'Developer');
    await insertEmployee('Jane Smith', 'Designer');
    
    await updateEmployee(johnId, 'John Updated', 'Senior Developer');
    
    const employees = await getAllEmployees();
    console.log('Current employees:', employees);
    
    await deleteEmployee(johnId);
    
    const remainingEmployees = await getAllEmployees();
    console.log('Remaining employees:', remainingEmployees);
    
  } catch (error) {
    console.error('An error occurred:', error);
  } finally {
    process.exit();
  }
}
 
main();

运行测试

在终端中执行以下命令运行测试程序:

node main.js

程序将依次执行创建表、插入数据、更新信息、查询和删除等操作,并在控制台输出执行结果。

最佳实践

  1. 安全性考虑

    • 使用环境变量管理敏感信息
    • 采用参数化查询防止 SQL 注入
    • 及时关闭不再使用的数据库连接
  2. 错误处理

    • 对所有数据库操作进行错误捕获
    • 使用 try-catch 语句处理异常
    • 提供清晰的错误提示信息
  3. 性能优化

    • 使用连接池管理数据库连接
    • 合理设置连接池参数
    • 避免频繁建立和断开连接

常见问题排查

如果遇到连接问题,请按以下步骤排查:

  1. 检查配置信息

    • 确认 .env 文件中的数据库连接参数是否正确
    • 验证数据库用户名和密码是否匹配
  2. 检查数据库状态

    • 确保 MySQL 数据库服务正常运行
    • 验证数据库实例是否可以访问
  3. 环境检查

    • 确认 DevBox 环境的网络设置
    • 验证依赖包是否正确安装

更多关于 Node.js 操作 MySQL 的详细信息,请参考 mysql2 官方文档

在 GitHub 上编辑

最后更新于

本页导航