Node.js实现MySQL数据库接口开发
IDC服务
Node.js实现MySQL数据库接口开发
2025-04-26 00:10
Node.js连接MySQL数据库开发RESTful API全攻略 ? 本教程将详细介绍如何使用Node.js创建接口并连接MySQL数据库,涵盖从环境搭建到安全部署的全过程。我们将使用Express框架和mysql2驱动,这是目前最稳定高效的Node.js MySQL解决方案。
Node.js连接MySQL数据库开发RESTful API全攻略 🚀
本教程将详细介绍如何使用Node.js创建接口并连接MySQL数据库,涵盖从环境搭建到安全部署的全过程。我们将使用Express框架和mysql2驱动,这是目前最稳定高效的Node.js MySQL解决方案。
一、环境准备与项目初始化
1. 系统要求检查
确保已安装:
- Node.js 16+(推荐18 LTS)
- MySQL 8.0+ 或 MariaDB 10.5+
- npm 8+
检查版本:
node -v
mysql --version
2. 项目初始化
创建项目目录并初始化:
mkdir node-mysql-api && cd node-mysql-api
npm init -y
3. 安装核心依赖
npm install express mysql2 dotenv cors
npm install --save-dev nodemon
关键包说明:
express
:Web框架mysql2
:支持Promise的MySQL驱动dotenv
:环境变量管理cors
:跨域支持nodemon
:开发热重载
二、MySQL数据库配置
1. 创建数据库与用户
CREATE DATABASE node_api;
CREATE USER 'api_user'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT ALL PRIVILEGES ON node_api.* TO 'api_user'@'localhost';
FLUSH PRIVILEGES;
2. 创建示例表
USE node_api;
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO products (name, price, stock)
VALUES ('Laptop', 999.99, 10), ('Phone', 699.99, 15);
三、项目结构搭建
推荐结构:
├── .env
├── config/
│ └── db.js
├── controllers/
│ └── productController.js
├── routes/
│ └── productRoutes.js
├── app.js
└── package.json
四、核心代码实现
1. 数据库连接配置 (config/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,
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
module.exports = pool;
2. 环境变量配置 (.env
)
DB_HOST=localhost
DB_USER=api_user
DB_PASSWORD=strongpassword
DB_NAME=node_api
PORT=3000
3. 控制器示例 (controllers/productController.js
)
const pool = require('../config/db');
exports.getAllProducts = async (req, res) => {
try {
const [rows] = await pool.query('SELECT * FROM products');
res.json(rows);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Database query failed' });
}
};
exports.getProductById = async (req, res) => {
try {
const [rows] = await pool.query('SELECT * FROM products WHERE id = ?', [req.params.id]);
if (rows.length === 0) {
return res.status(404).json({ error: 'Product not found' });
}
res.json(rows[0]);
} catch (err) {
console.error(err);
res.status(500).json({ error: 'Database query failed' });
}
};
4. 路由配置 (routes/productRoutes.js
)
const express = require('express');
const router = express.Router();
const productController = require('../controllers/productController');
router.get('/', productController.getAllProducts);
router.get('/:id', productController.getProductById);
module.exports = router;
5. 主应用文件 (app.js
)
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const productRoutes = require('./routes/productRoutes');
const app = express();
const PORT = process.env.PORT || 3000;
// 中间件
app.use(cors());
app.use(express.json());
// 路由
app.use('/api/products', productRoutes);
// 错误处理
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Something broke!' });
});
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
五、高级功能实现 🔧
1. 事务处理示例
exports.createOrder = async (req, res) => {
const conn = await pool.getConnection();
try {
await conn.beginTransaction();
// 1. 检查库存
const [product] = await conn.query(
'SELECT stock FROM products WHERE id = ? FOR UPDATE',
[req.body.productId]
);
if (product[0].stock < req.body.quantity) {
&a
标签:
- Node.js
- MySQL