Sequelize 拓展之配置详解
Sequelize 是 Node.js 中一个强大的 ORM 框架,用于操作 SQL 数据库。它提供了丰富的 API,支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多种数据库。在使用 Sequelize 进行开发时,配置是很重要的一部分。
Sequelize 的基础配置
- 引入 Sequelize
在 Node.js 中使用 Sequelize,首先需要通过 npm 安装:
npm install sequelize
然后在代码中引入:
const Sequelize = require('sequelize');- 连接数据库
使用 Sequelize,可以通过配置连接信息来连接数据库。下面是一个例子:
const sequelize = new Sequelize('database_name', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: false
});上面代码中,第一个参数是数据库的名称,第二个和第三个参数是数据库的用户名和密码。其中,host 可以设置为连接的服务器,dialect 表示要连接的数据库类型,logging 表示是否打印 SQL 语句。
- 定义数据模型
定义数据模型是 Sequelize 最重要的一步。数据模型是指数据库表的结构,Sequelize 可以根据数据模型自动生成 SQL 语句。
// www.javascriptcn.com code example
const User = sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
age: {
type: Sequelize.INTEGER,
allowNull: false
}
});上面代码定义了一个名为 User 的数据模型,对应的数据库表名为 users。数据模型中定义了三个字段:id、name、age。其中,id 是一个自增的整数,同时也是主键;name 和 age 字段分别是字符串和整数类型,并且不能为空。
- 同步模型和数据库
在定义好数据模型后,需要将模型与数据库同步。Sequelize 会自动创建数据表、字段和索引。
sequelize.sync()
.then(() => {
console.log('Models synced successfully!');
})
.catch(err => {
console.error('Error syncing models: ', err);
});上面代码会同步所有定义的数据模型,默认情况下 Sequelize 会使用 ALTER TABLE 语句,如果需要完全重新创建数据表,则可以使用 force 选项:
sequelize.sync({ force: true })
.then(() => {
console.log('Database recreated successfully!');
})
.catch(err => {
console.error('Error recreating database: ', err);
});Sequelize 高级配置
除了上面的基础配置外,Sequelize 还提供了很多高级的配置选项,可以根据实际需求进行设置,这里介绍一些常用的配置项。
- POOL 配置
Sequelize 使用连接池管理数据库连接,可以通过以下选项配置池:
// www.javascriptcn.com code example
const sequelize = new Sequelize('database_name', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: false,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
});上面代码中,pool 选项包含以下四个属性:
- max:连接池中最大连接数,默认为 5。
- min:连接池中最小连接数,默认为 0。
- acquire:连接超时时间(毫秒),超过这个时间将会抛出错误,默认为 30000。
- idle:连接空闲的时间(毫秒),连接超过这个时间将被释放,默认为 10000。
- OPERATORS ALIASES 配置
Sequelize 支持多种查询操作符(比如 $eq、$ne、$gte、$lt 等),可以简化 SQL 语句的编写。可以使用操作符别名来重命名这些操作符,以便于在应用程序中使用。
// www.javascriptcn.com code example
const Op = Sequelize.Op;
const sequelize = new Sequelize('database_name', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: false,
operatorsAliases: {
$eq: Op.eq,
$ne: Op.ne,
$gte: Op.gte,
$gt: Op.gt,
$lte: Op.lte,
$lt: Op.lt,
$in: Op.in,
$notIn: Op.notIn,
$is: Op.is,
$like: Op.like,
$notLike: Op.notLike,
$iLike: Op.iLike,
$notILike: Op.notILike,
$regexp: Op.regexp,
$notRegexp: Op.notRegexp,
$iRegexp: Op.iRegexp,
$notIRegexp: Op.notIRegexp,
$between: Op.between,
$notBetween: Op.notBetween,
$overlap: Op.overlap,
$contains: Op.contains,
$contained: Op.contained,
$adjacent: Op.adjacent,
$strictLeft: Op.strictLeft,
$strictRight: Op.strictRight,
$noExtendRight: Op.noExtendRight,
$noExtendLeft: Op.noExtendLeft,
$and: Op.and,
$or: Op.or,
$any: Op.any,
$all: Op.all,
$values: Op.values,
$col: Op.col
}
});上面的代码定义了一组操作符别名,在使用时可以直接使用别名,不用每次都写完整的操作符名称。
- TIMEZONE 配置
Sequelize 在处理日期时间类型时,会默认使用数据库服务器的时区。为了避免时区的问题,可以通过 timezone 选项设置一个固定的时区。
const sequelize = new Sequelize('database_name', 'username', 'password', {
host: 'localhost',
dialect: 'mysql',
logging: false,
timezone: '+08:00' // 设置东八区
});- MODEL CONFIG 配置
Sequelize 允许在定义数据模型时,设置一系列的选项,这些选项会影响到模型的行为和属性。
// www.javascriptcn.com code example
const User = sequelize.define('user', {
id: {
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
age: {
type: Sequelize.INTEGER,
allowNull: false
}
}, {
timestamps: true, // 自动添加 createdAt 和 updatedAt 字段
paranoid: true, // 启用软删除功能
underscored: true, // 使用下划线命名法(字段名)
freezeTableName: true, // 使用模型名称作为数据库表名
tableName: 'user_info' // 指定数据库表名
});上面的代码中,第三个参数是一个对象,包含了一系列的配置选项。常用的选项有:
- timestamps:是否自动添加 createdAt 和 updatedAt 字段,如果设为 true 则会在数据表中新建这两个字段。
- paranoid:是否启用软删除功能,如果设为 true 则会在数据表中新建 deletedAt 字段,记录删除时间。
- underscored:是否使用下划线命名法,如果设为 true 则会在实体对象中使用下划线命名法。
- freezeTableName:是否使用模型名称作为数据库表名,如果设为 true 则会使用该模型的名称作为数据表的名称。
- tableName:指定数据库表名。
上面的配置选项可以根据实际需求进行设置,以便于更好地使用 Sequelize。
结语
本文介绍了 Sequelize 的基础配置和一些高级配置选项,在开发中需要灵活运用这些选项。在实践中,你可能需要根据数据库的具体情况进行一些微调。Sequelize 在 Node.js 中扮演着非常重要的角色,希望大家在实际开发中能够体会到 Sequelize 强大而灵活的特点。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67cfcf50e46428fe9ebd800e