Express.js 中使用 MySQL 实现数据存储

在开发 Web 应用时,数据存储是一个必不可少的环节。而 MySQL 作为一种广泛使用的关系型数据库,其在前端开发中也有着重要的作用。本文将介绍如何在 Express.js 中使用 MySQL 实现数据存储。

准备工作

在使用 MySQL 之前,需要先安装 MySQL 数据库,并创建一个数据库和一张表。以 Windows 系统为例,可以按照以下步骤进行安装:

  1. 下载 MySQL 安装包并解压。
  2. 配置环境变量,将 MySQL 的 bin 目录加入 PATH 中。
  3. 打开命令行工具,输入 mysql -u root -p 进入 MySQL 数据库。
  4. 创建一个数据库,如 mydb,并指定字符集为 utf8mb4
    CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  5. 创建一张表,如 users,包含 idnameemail 三个字段。
    CREATE TABLE users (
      id INT NOT NULL AUTO_INCREMENT,
      name VARCHAR(255) NOT NULL,
      email VARCHAR(255) NOT NULL,
      PRIMARY KEY (id)
    );

安装依赖

在 Express.js 中使用 MySQL,需要安装以下两个依赖:

  • mysql2:MySQL 客户端。
  • sequelize:ORM(Object-Relational Mapping)框架,用于操作数据库。

可以使用以下命令进行安装:

npm install mysql2 sequelize

配置连接

在 Express.js 中使用 MySQL,需要配置数据库连接。可以在应用的入口文件(如 app.js)中进行配置:

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

const sequelize = new Sequelize('mydb', 'root', 'password', {
  dialect: 'mysql',
  host: 'localhost',
  port: 3306,
  define: {
    timestamps: false,
  },
});

(async () => {
  try {
    await sequelize.authenticate();
    console.log('Connection has been established successfully.');
  } catch (error) {
    console.error('Unable to connect to the database:', error);
  }
})();

其中,mydb 是数据库名称,rootpassword 分别是 MySQL 的用户名和密码,localhost 是 MySQL 的主机名,3306 是 MySQL 的端口号。define.timestamps 表示不使用默认的时间戳字段。

创建模型

在使用 Sequelize 操作数据库时,需要先定义模型。模型是指数据库中的表在代码中的映射,包含表的结构和操作。可以通过以下代码创建一个 User 模型:

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

const User = sequelize.define('User', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
  },
  name: {
    type: DataTypes.STRING(255),
    allowNull: false,
  },
  email: {
    type: DataTypes.STRING(255),
    allowNull: false,
  },
}, {
  tableName: 'users',
});

其中,DataTypes 是 Sequelize 中的数据类型,idnameemail 分别是 users 表中的三个字段,primaryKey 表示主键,autoIncrement 表示自增,allowNull 表示不允许为空。

增删改查

在定义好模型后,可以通过模型进行增删改查操作。以下是一些示例代码:

增加数据

const createUser = async (name, email) => {
  const user = await User.create({ name, email });
  return user.get({ plain: true });
};

删除数据

const deleteUser = async (id) => {
  const user = await User.destroy({ where: { id } });
  return user === 1;
};

修改数据

const updateUser = async (id, name, email) => {
  const user = await User.update({ name, email }, { where: { id } });
  return user[0] === 1;
};

查询数据

const getUser = async (id) => {
  const user = await User.findByPk(id);
  return user ? user.get({ plain: true }) : null;
};

const getUsers = async () => {
  const users = await User.findAll();
  return users.map((user) => user.get({ plain: true }));
};

其中,findByPk 根据主键查询单条数据,findAll 查询所有数据。

总结

本文介绍了如何在 Express.js 中使用 MySQL 实现数据存储。通过配置连接、创建模型和定义增删改查操作,可以方便地操作数据库。同时,Sequelize 还支持事务、关联查询等高级功能,可以满足不同场景下的需求。

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