Sequelize 实践:使用 RESTful API 实现 CRUD 操作

前言

Sequelize 是 Node.js 中一个非常流行的 ORM 框架,它支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 MSSQL 等。使用 Sequelize 可以让我们更加方便地操作数据库,提高开发效率。

在本文中,我们将介绍如何使用 Sequelize 实现常见的 CRUD 操作,并通过 RESTful API 的方式对外提供服务。

环境准备

在开始实践之前,我们需要安装一些必要的工具和库:

安装完成后,我们可以创建一个新的 Node.js 项目,并在项目中安装 Express 和 Sequelize:

npm init -y
npm install express sequelize mysql2

数据库准备

在本文中,我们将使用 MySQL 数据库作为示例。首先,我们需要创建一个数据库,并在其中创建一个表。我们可以使用以下 SQL 语句创建一个名为 users 的表:

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,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

模型定义

在 Sequelize 中,我们需要定义一个模型来表示数据库中的表。我们可以通过以下代码定义一个名为 User 的模型:

const { Sequelize, DataTypes } = require('sequelize');

const sequelize = new Sequelize({
  dialect: 'mysql',
  host: 'localhost',
  username: 'root',
  password: 'password',
  database: 'database',
});

const User = sequelize.define('User', {
  name: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  email: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  password: {
    type: DataTypes.STRING,
    allowNull: false,
  },
});

在上面的代码中,我们首先创建了一个 Sequelize 实例,并指定了连接的数据库信息。然后,我们通过 sequelize.define 方法定义了一个名为 User 的模型,该模型包含三个字段:nameemailpassword

路由定义

在 Express 中,我们可以通过定义路由来处理客户端发来的请求。我们可以使用以下代码定义一个名为 users 的路由,该路由对应的 URL 前缀为 /users

const express = require('express');
const router = express.Router();

router.get('/', async (req, res) => {
  // TODO: 查询所有用户
});

router.get('/:id', async (req, res) => {
  // TODO: 查询指定用户
});

router.post('/', async (req, res) => {
  // TODO: 创建新用户
});

router.put('/:id', async (req, res) => {
  // TODO: 更新指定用户
});

router.delete('/:id', async (req, res) => {
  // TODO: 删除指定用户
});

module.exports = router;

在上面的代码中,我们定义了五个路由,分别对应 GETPOSTPUTDELETE 四种 HTTP 方法。我们可以通过在路由处理函数中调用模型的方法来实现对数据库的操作。

查询所有用户

我们可以使用模型的 findAll 方法查询所有用户,并将查询结果返回给客户端。以下是实现代码:

router.get('/', async (req, res) => {
  const users = await User.findAll();
  res.json(users);
});

在上面的代码中,我们通过调用 User.findAll 方法查询所有用户,并使用 res.json 方法将查询结果以 JSON 格式返回给客户端。

查询指定用户

我们可以使用模型的 findByPk 方法查询指定用户,并将查询结果返回给客户端。以下是实现代码:

router.get('/:id', async (req, res) => {
  const user = await User.findByPk(req.params.id);
  res.json(user);
});

在上面的代码中,我们通过调用 User.findByPk 方法查询指定用户,并使用 res.json 方法将查询结果以 JSON 格式返回给客户端。其中,req.params.id 表示客户端传来的参数中的 id 值。

创建新用户

我们可以使用模型的 create 方法创建新用户,并将创建结果返回给客户端。以下是实现代码:

router.post('/', async (req, res) => {
  const { name, email, password } = req.body;
  const user = await User.create({ name, email, password });
  res.json(user);
});

在上面的代码中,我们首先从客户端传来的请求体中获取 nameemailpassword 三个参数。然后,我们通过调用 User.create 方法创建新用户,并使用 res.json 方法将创建结果以 JSON 格式返回给客户端。

更新指定用户

我们可以使用模型的 update 方法更新指定用户,并将更新结果返回给客户端。以下是实现代码:

router.put('/:id', async (req, res) => {
  const { name, email, password } = req.body;
  const [count] = await User.update({ name, email, password }, { where: { id: req.params.id } });
  if (count > 0) {
    const user = await User.findByPk(req.params.id);
    res.json(user);
  } else {
    res.status(404).end();
  }
});

在上面的代码中,我们首先从客户端传来的请求体中获取 nameemailpassword 三个参数。然后,我们通过调用 User.update 方法更新指定用户,并使用 res.json 方法将更新结果以 JSON 格式返回给客户端。其中,req.params.id 表示客户端传来的参数中的 id 值。

删除指定用户

我们可以使用模型的 destroy 方法删除指定用户,并将删除结果返回给客户端。以下是实现代码:

router.delete('/:id', async (req, res) => {
  const count = await User.destroy({ where: { id: req.params.id } });
  if (count > 0) {
    res.status(204).end();
  } else {
    res.status(404).end();
  }
});

在上面的代码中,我们通过调用 User.destroy 方法删除指定用户,并使用 res.status(204).end() 方法将删除结果以 HTTP 状态码 204 的形式返回给客户端。如果指定用户不存在,则返回 HTTP 状态码 404。

总结

在本文中,我们介绍了如何使用 Sequelize 实现常见的 CRUD 操作,并通过 RESTful API 的方式对外提供服务。通过本文的学习,读者可以了解到 Sequelize 的基本用法,并能够使用 Sequelize 开发基于 Node.js 的 Web 应用程序。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/658e4b22eb4cecbf2d41a688


纠错
反馈