# MariaDB + Node.js 项目

URL: https://caijiao.org/mariadb/advanced/case/node-project
Source: docs/mariadb/advanced/case/node-project.md
Description: 本节介绍如何使用 MariaDB 结合 Node.js 构建项目，涵盖环境搭建、数据库连接、基本 CRUD 操作及实用示例，助力开发高效的后端应用。

## 1. 环境准备

- 安装 Node.js（推荐最新版 LTS）
- 安装 MariaDB 数据库并确保运行
- 使用 npm 初始化项目：

```bash
npm init -y
````

* 安装 MariaDB Node.js 驱动：

```bash
npm install mariadb
```

## 2. 数据库连接

创建数据库连接池，示例代码：

```js
const mariadb = require('mariadb');

const pool = mariadb.createPool({
  host: 'localhost',
  user: 'root',
  password: 'your_password',
  database: 'testdb',
  connectionLimit: 5
});

async function testConnection() {
  let conn;
  try {
    conn = await pool.getConnection();
    console.log("数据库连接成功");
  } catch (err) {
    console.error("连接错误:", err);
  } finally {
    if (conn) conn.release();
  }
}

testConnection();
```

## 3. 基本 CRUD 操作示例

* **插入数据**

```js
async function insertUser(username, email) {
  let conn;
  try {
    conn = await pool.getConnection();
    const res = await conn.query("INSERT INTO users(username, email) VALUES (?, ?)", [username, email]);
    console.log("插入成功，ID:", res.insertId);
  } catch (err) {
    console.error(err);
  } finally {
    if (conn) conn.release();
  }
}
```

* **查询数据**

```js
async function getUsers() {
  let conn;
  try {
    conn = await pool.getConnection();
    const rows = await conn.query("SELECT * FROM users");
    console.log(rows);
  } catch (err) {
    console.error(err);
  } finally {
    if (conn) conn.release();
  }
}
```

* **更新数据**

```js
async function updateUserEmail(id, newEmail) {
  let conn;
  try {
    conn = await pool.getConnection();
    await conn.query("UPDATE users SET email = ? WHERE id = ?", [newEmail, id]);
    console.log("更新成功");
  } catch (err) {
    console.error(err);
  } finally {
    if (conn) conn.release();
  }
}
```

* **删除数据**

```js
async function deleteUser(id) {
  let conn;
  try {
    conn = await pool.getConnection();
    await conn.query("DELETE FROM users WHERE id = ?", [id]);
    console.log("删除成功");
  } catch (err) {
    console.error(err);
  } finally {
    if (conn) conn.release();
  }
}
```

## 4. 项目结构示例

```
node-mariadb-project/
├── index.js          # 主入口文件
├── db.js             # 数据库连接池配置
├── controllers/      # 业务逻辑
├── routes/           # 路由定义（如使用 Express）
└── package.json
```

## 5. 结合 Express 框架示例（简单路由）

```js
const express = require('express');
const app = express();
app.use(express.json());

app.get('/users', async (req, res) => {
  // 查询用户代码，调用 getUsers()
});

app.post('/users', async (req, res) => {
  // 新增用户代码，调用 insertUser()
});

app.listen(3000, () => {
  console.log('服务启动，监听端口3000');
});
```

---

MariaDB 与 Node.js 的结合能帮助你快速构建现代化后端应用，适合开发高性能、可扩展的 Web 服务。
