Express.js 中使用 Sequelize 进行 ORM 操作
Sequelize 是一个 Node.js 的 ORM(Object-Relational Mapping)框架,用于操作关系型数据库,如 MySQL、PostgreSQL、SQLite 等。它支持 Promise、事务、模型定义、查询构建器和外键等功能,提供了方便简洁的操作数据库的 API。
在 Express.js 中,通过 Sequelize 可以轻松地进行数据库操作,并且可以提高开发效率和代码质量。本文详细介绍了如何在 Express.js 中使用 Sequelize 进行 ORM 操作。
安装和配置 Sequelize
在项目中安装 Sequelize:
npm install --save sequelize
同时,还需安装适用于所使用数据库的驱动程序,如 mysql2、pg、sqlite3 等。以 mysql2 为例:
npm install --save mysql2
在使用 Sequelize 之前,还需要将其初始化。通过以下代码,创建 Sequelize 实例:
const Sequelize = require('sequelize'); const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql2', //数据库类型 host: 'localhost', //数据库主机地址 });
创建 Sequelize 实例时,需要传入数据库名称、用户名和密码等相关信息。还可以通过 host、port、timezone 等配置项,进行更详细的配置。
创建模型
在 Sequelize 中,模型以 JavaScript 类的形式存在,对应着数据库中的表。定义模型时,需要指定模型名称、表名、字段、关联等信息。
以创建名为 User、对应着 users 表的模型为例:
const Sequelize = require('sequelize'); const Model = Sequelize.Model; class User extends Model {} User.init({ // 属性 username: { type: Sequelize.STRING, allowNull: false, }, password: { type: Sequelize.STRING, allowNull: false, }, }, { sequelize, // 连接对象 modelName: 'user', // 模型名称 tableName: 'users', // 表名 timestamps: false, // 是否启用时间戳字段 });
在模型中定义属性时,需要指定每个属性的数据类型、是否允许为空、默认值等信息。同时,还可以通过 timestamps、paranoid 等选项,设置模型中存在的时间戳字段和软删除等功能。
进行基本的 CRUD 操作
在创建好模型之后,可以进行基本的 CRUD(Create, Read, Update, Delete)操作,对数据库进行读写。
- 创建(Create)操作
User.create({ username: 'Alice', password: '123456', }).then(user => { console.log(user.toJSON()); });
- 读(Read)操作
User.findByPk(1).then(user => { console.log(user.toJSON()); }); User.findOne({ where: { username: 'Alice', }, }).then(user => { console.log(user.toJSON()); }); User.findAll().then(users => { console.log(users.map(user => user.toJSON())); });
- 更新(Update)操作
User.update({ password: '654321', }, { where: { username: 'Alice', }, }).then(result => { console.log(result); });
- 删除(Delete)操作
User.destroy({ where: { username: 'Alice', }, }).then(result => { console.log(result); });
进行事务管理(Transaction)
在数据库操作过程中,可能会涉及到多个表的操作,需要保证操作的原子性,即要么全部成功,要么全部失败。此时,可以使用事务管理。
事务使用 Sequelize 的 transaction 函数创建,同时,在每次对数据库进行操作时,需要将事务对象传递给相关函数。
以在创建用户的同时,创建一个令牌(Token)为例:
sequelize.transaction(function (t) { return User.create({ username: 'Bob', password: '123456', }, { transaction: t, }).then(user => { return Token.create({ userId: user.id, token: 'abcdefg', }, { transaction: t, }); }); }).then(result => { console.log('Transaction committed.'); }).catch(err => { console.error('Transaction rolled back.'); });
在创建事务时,需要先创建一个 Sequelize 实例。在创建模型时,需要将其传递给模型的初始化函数。
const sequelize = new Sequelize('database', 'username', 'password', { dialect: 'mysql2', host: 'localhost', }); const User = sequelize.define('user', { // 属性 username: { type: Sequelize.STRING, allowNull: false, }, password: { type: Sequelize.STRING, allowNull: false, }, }); const Token = sequelize.define('token', { // 属性 userId: { type: Sequelize.INTEGER, allowNull: false, }, token: { type: Sequelize.STRING, allowNull: false, }, });
总结
本文简单介绍了在 Express.js 中使用 Sequelize 进行 ORM 操作的步骤。在实际开发中,还涉及到模型关联、查询构建器等高级功能,需要进行进一步的学习和实践。
在使用 Sequelize 进行 ORM 操作时,需要注意安全性问题,避免 SQL 注入等安全漏洞的发生。同时,还需要合理地使用事务管理等功能,保证操作的原子性和完整性,提高代码质量和可维护性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b22903add4f0e0ffb54529