返回

Node、Express和MySQL携手打造简约增删查改应用

前端

利用 Node、Express 和 MySQL 构建无缝的增删查改应用

引言

在现代应用程序开发中,增删查改(CRUD)操作至关重要,它们决定了与数据库的交互。本文将指导您使用 Node.js、Express 和 MySQL 这三大 Web 开发支柱,逐步构建一个强大的 CRUD 应用程序。我们将深入探讨每个组件,让您轻松理解并实施这些基本操作。

1. 创建数据库表

首先,我们需要为应用程序创建数据库表。打开 MySQL 命令行工具并输入以下查询:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这将创建一个名为 "users" 的表,其中包含六个字段:id(自增主键)、nameemailpasswordcreated_atupdated_at

2. 设置 Node.js 应用程序

接下来,让我们设置我们的 Node.js 应用程序。创建一个新目录并使用以下命令初始化一个 npm 项目:

mkdir my-app
cd my-app
npm init -y

然后,安装 MySQL 插件:

npm install mysql

3. 创建数据库连接

为了与数据库进行交互,我们需要在应用程序中创建一个连接。在项目中创建一个名为 database.js 的文件,并输入以下代码:

const mysql = require('mysql');

const db = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'my_database'
});

db.connect((err) => {
  if (err) {
    throw err;
  }

  console.log('Database connected');
});

module.exports = db;

此代码使用 MySQL 插件建立与数据库的连接。

4. 构建 Express 路由

Express 负责处理客户端请求。在 routes/users.js 文件中,输入以下代码:

const express = require('express');
const router = express.Router();
const db = require('../database');

// 获取所有用户
router.get('/users', (req, res) => {
  db.query('SELECT * FROM users', (err, results) => {
    if (err) {
      throw err;
    }

    res.send(results);
  });
});

// 创建新用户
router.post('/users', (req, res) => {
  const user = req.body;

  db.query('INSERT INTO users SET ?', user, (err, results) => {
    if (err) {
      throw err;
    }

    res.send(results);
  });
});

// 更新用户
router.put('/users/:id', (req, res) => {
  const user = req.body;

  db.query('UPDATE users SET ? WHERE id = ?', [user, req.params.id], (err, results) => {
    if (err) {
      throw err;
    }

    res.send(results);
  });
});

// 删除用户
router.delete('/users/:id', (req, res) => {
  db.query('DELETE FROM users WHERE id = ?', req.params.id, (err, results) => {
    if (err) {
      throw err;
    }

    res.send(results);
  });
});

module.exports = router;

这些路由处理不同的 CRUD 操作:获取所有用户、创建新用户、更新现有用户和删除用户。

5. 启动应用程序

最后,在 server.js 文件中配置 Express 应用程序:

const express = require('express');
const app = express();

app.use(express.json());
app.use('/users', require('./routes/users'));

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

使用以下命令启动服务器:

node server.js

6. 测试 CRUD 操作

现在,我们可以使用浏览器或命令行工具测试我们的 CRUD 操作。

  • 获取所有用户: 使用 curl http://localhost:3000/users 命令
  • 创建新用户: 使用 curl -X POST -H "Content-Type: application/json" -d '{"name": "John Doe", "email": "johndoe@example.com", "password": "password"}' http://localhost:3000/users 命令
  • 更新用户: 使用 curl -X PUT -H "Content-Type: application/json" -d '{"name": "Jane Doe"}' http://localhost:3000/users/2 命令,其中 2 是要更新的用户 ID
  • 删除用户: 使用 curl -X DELETE http://localhost:3000/users/2 命令,其中 2 是要删除的用户 ID

常见问题解答

  • 如何处理错误? 每个路由都包含错误处理,以在发生错误时抛出异常。
  • 如何保护我的应用程序免受 SQL 注入攻击? 使用参数化查询(例如 db.query('UPDATE users SET ? WHERE id = ?', [user, req.params.id]))可以防止 SQL 注入攻击。
  • 如何优化我的数据库查询? 索引表列并使用适当的数据类型可以提高查询性能。
  • 如何扩展我的应用程序以支持其他数据库? 使用抽象层(例如 Sequelize)可以轻松地将应用程序移植到其他数据库系统。
  • 如何保护用户数据? 使用加密技术(例如 bcrypt)来安全地存储密码。

结论

通过将 Node.js、Express 和 MySQL 结合使用,我们构建了一个灵活而强大的增删查改应用程序。遵循本指南,您可以轻松地为您的项目实现这些基本数据库操作。随着应用程序的发展,了解优化技术并采用安全措施至关重要,以确保高效和安全的性能。