Node.js,以其非阻塞I/O模型、事件驱动架构和高性能,成为了构建高效、可扩展后端服务的热门选择
而当谈到数据存储时,MySQL 作为一款成熟、开源的关系型数据库管理系统,以其稳定性、灵活性和广泛的支持,成为众多开发者的首选
结合 Express 框架,我们可以快速搭建起一个功能强大、易于维护的Web应用后端
本文将深入探讨如何使用 Node.js 连接 MySQL 数据库,并通过 Express 框架实现数据交互,为你提供一个完整且实用的开发指南
一、环境准备 在开始之前,确保你的开发环境中已经安装了以下必要软件: 1.Node.js:从 【Node.js 官网】(https://nodejs.org/) 下载并安装最新稳定版
2.MySQL:可以从 【MySQL 官网】(https://dev.mysql.com/downloads/mysql/) 下载并安装 MySQL Server,或者使用 Docker 容器化部署
3.npm(Node Package Manager):Node.js 自带的包管理工具,用于安装和管理项目依赖
4.IDE 或文本编辑器:推荐使用 Visual Studio Code,因其对 Node.js 和前端开发的良好支持
二、创建项目目录与初始化 1.创建项目目录: bash mkdir my-express-mysql-app cd my-express-mysql-app 2.初始化 Node.js 项目: bash npm init -y 这将自动生成一个`package.json` 文件,包含项目的基本信息
三、安装所需依赖 接下来,我们需要安装 Express 框架和 MySQL 的 Node.js 客户端库
这里我们使用`mysql2` 库,它是`mysql` 库的一个改进版,提供了更好的性能和异步/Promise 支持
bash npm install express mysql2 四、配置 MySQL 数据库 在继续之前,确保你的 MySQL 数据库已经启动,并创建一个用于测试的数据库和表
例如,创建一个名为`testdb` 的数据库,以及一个简单的`users` 表: sql CREATE DATABASE testdb; USE testdb; CREATE TABLE users( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(100) NOT NULL UNIQUE ); 五、编写服务器代码 在项目根目录下创建一个`app.js` 文件,并编写以下代码: javascript const express = require(express); const mysql = require(mysql2/promise); const app = express(); const port = 3000; // MySQL 连接配置 const dbConfig ={ host: localhost, user: root, // 根据你的 MySQL 用户配置调整 password: yourpassword, // 根据你的 MySQL 密码配置调整 database: testdb }; let connection; // 建立数据库连接 async function createConnection(){ try{ connection = await mysql.createConnection(dbConfig); console.log(Connected to MySQL database); } catch(err){ console.error(Error connecting to MySQL database:, err); process.exit(1); } } // 关闭数据库连接 async function closeConnection(){ if(connection){ try{ await connection.end(); console.log(MySQL connection closed); } catch(err){ console.error(Error closing MySQL connection:, err); } } } // 中间件:解析 JSON 请求体 app.use(express.json()); // 获取所有用户 app.get(/users, async(req, res) =>{ try{ const【rows】 = await connection.execute(SELECTFROM users); res.json(rows); } catch(err){ res.status(500).json({ error: err.message}); } }); // 创建新用户 app.post(/users, async(req, res) =>{ const{ name, email} = req.body; try{ const【result】 = await connection.execute(INSERT INTO users(name, email) VALUES(?, ?),【name, email】); res.status(201).json({ id: result.insertId, ...req.body}); } catch(err){ if(err.code === ER_DUP_ENTRY){ res.status(409).json({ error: Email already exists}); } else{ res.status(500).json({ error: err.message}); } } }); // 启动服务器前建立数据库连接 createConnection(); // 服务器监听端口 app.