返回

从零搭建个人博客网站(三)—学会利用 Sequelize 操作 MySQL

见解分享

前言

在上一篇文章中,我们已经成功搭建了个人博客网站的基础架构,包括安装必要的软件包、配置服务器环境、以及创建第一个路由。现在,我们将进一步探索如何使用 Sequelize 操作 MySQL 数据库,以便为我们的博客网站提供数据持久化功能。

安装依赖

首先,我们需要安装必要的依赖包。在您的项目根目录下,使用以下命令安装 Sequelize:

npm install sequelize

数据库配置

接下来,我们需要配置数据库连接信息。在项目的根目录下,创建一个名为 .env 的文件,并在其中写入以下内容:

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=blog
DB_PORT=3306

其中,DB_HOST 是数据库的主机地址,DB_USER 是数据库的用户名,DB_PASSWORD 是数据库的密码,DB_NAME 是数据库的名称,DB_PORT 是数据库的端口号。

初始化 Sequelize

在项目中,创建一个名为 models 的文件夹,并在其中创建一个名为 index.js 的文件。在该文件中,编写以下代码:

const Sequelize = require('sequelize');

// 创建 Sequelize 实例
const sequelize = new Sequelize({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  port: process.env.DB_PORT,
  dialect: 'mysql',
  logging: false,
});

// 测试连接
sequelize.authenticate().then(() => {
  console.log('数据库连接成功!');
}).catch((err) => {
  console.error('数据库连接失败:', err);
});

// 导出 Sequelize 实例
module.exports = sequelize;

这段代码创建了一个 Sequelize 实例,并尝试连接到数据库。如果连接成功,则会在控制台输出“数据库连接成功!”;如果连接失败,则会在控制台输出“数据库连接失败:”以及错误信息。

定义一个测试数据模型

接下来,我们需要定义一个测试数据模型。在 models 文件夹中,创建一个名为 Post.js 的文件,并在其中编写以下代码:

const Sequelize = require('sequelize');
const sequelize = require('./index');

// 定义数据模型
const Post = sequelize.define('post', {
  id: {
    type: Sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true,
  },
  title: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  content: {
    type: Sequelize.TEXT,
    allowNull: false,
  },
  author: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  createdAt: {
    type: Sequelize.DATE,
    allowNull: false,
    defaultValue: Sequelize.NOW,
  },
  updatedAt: {
    type: Sequelize.DATE,
    allowNull: false,
    defaultValue: Sequelize.NOW,
  },
});

// 导出数据模型
module.exports = Post;

这段代码定义了一个名为 Post 的数据模型,该模型包含了五个字段:idtitlecontentauthorcreatedAtupdatedAt。其中,id 是主键,titlecontent 是必填字段,author 是作者字段,createdAtupdatedAt 是创建时间和更新时间字段。

同步数据结构到数据库

接下来,我们需要将定义的数据模型同步到数据库中。在项目中,创建一个名为 sync-db.js 的文件,并在其中编写以下代码:

const sequelize = require('./models/index');

// 同步数据结构到数据库
sequelize.sync({ force: true }).then(() => {
  console.log('数据结构同步成功!');
}).catch((err) => {
  console.error('数据结构同步失败:', err);
});

这段代码会将定义的数据模型同步到数据库中。如果数据库中已经存在该数据模型,则会强制删除旧的数据模型并重新创建。

定义 Controller

接下来,我们需要定义一个 Controller 来处理与数据模型相关的操作。在 controllers 文件夹中,创建一个名为 postController.js 的文件,并在其中编写以下代码:

const Post = require('../models/Post');

// 新增数据
exports.createPost = async (req, res) => {
  const { title, content, author } = req.body;
  const post = await Post.create({ title, content, author });
  res.json(post);
};

// 修改数据
exports.updatePost = async (req, res) => {
  const { id, title, content, author } = req.body;
  const post = await Post.update({ title, content, author }, { where: { id } });
  res.json(post);
};

// 查询列表
exports.getAllPosts = async (req, res) => {
  const posts = await Post.findAll();
  res.json(posts);
};

// 查询单个
exports.getPostById = async (req, res) => {
  const post = await Post.findByPk(req.params.id);
  res.json(post);
};

// 删除数据
exports.deletePost = async (req, res) => {
  await Post.destroy({ where: { id: req.params.id } });
  res.json({ message: '删除成功!' });
};

这段代码定义了一个名为 postController 的 Controller,该 Controller 包含了五个方法:createPostupdatePostgetAllPostsgetPostByIddeletePost。这些方法分别用于处理新增数据、修改数据、查询列表、查询单个和删除数据。

使用 Model 进行操作

接下来,我们需要在路由中使用定义的 Controller 和 Model 来进行数据操作。在 routes 文件夹中,创建一个名为 postRoutes.js 的文件,并在其中编写以下代码:

const express = require('express');
const router = express.Router();
const postController = require('../controllers/postController');

// 新增数据
router.post('/posts', postController.createPost);

// 修改数据
router.put('/posts/:id', postController.updatePost);

// 查询列表
router.get('/posts', postController.getAllPosts);

// 查询单个
router.get('/posts/:id', postController.getPostById);

// 删除数据
router.delete('/posts/:id', postController.deletePost);

module.exports = router;

这段代码在路由中使用定义的 postControllerPost 模型来进行数据操作。

编写路由接口数据

最后,我们需要在 server.js 文件中编写路由接口数据。在 server.js 文件中,在 app.use('/api', router); 下方添加以下代码:

app.use('/api/posts', require('./routes/postRoutes'));

这段代码将 postRoutes 路由注册到 /api/posts 路径下。

总结

至此,我们已经完成了使用 Sequelize 操作 MySQL 数据库的教程。我们学习了如何安装依赖、配置数据库、初始化 Sequelize、测试连接、定义模型、同步数据结构、定义 Controller、使用 Model 进行操作、编写路由接口数据等。通过本教程,您已经掌握了如何使用 Sequelize 管理 MySQL 数据库,为您的个人博客网站构建强大的数据持久化功能。