Sequelize 使用手册
📄字数 2.6K
👁️阅读量 加载中...
Sequelize 是一个基于 promise 的 Node.js ORM 框架,它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。本文档将介绍 XuguDB 对 Sequelize 框架的适配情况,并简易描述使用 Sequelize 开发 XuguDB 应用的 Demo 指南。
框架名称 | 适配起始版本 | 官网地址 | 源框架下载地址 | XuguDB框架下载 | demo程序地址 |
---|---|---|---|---|---|
Sequelize | 6.37.3 | Sequelize官网 | - | 版本发布列表 | xugu-sequelize |
提示
版本发布列表源代码压缩包即为产品压缩包。
其他适配版本可详见版本发布列表
一、方言包使用说明
解压获取到的 xugu-dialect 目录放置到 Sequelize 的 dialects 目录下,路径通常为
\node_modules\sequelize\lib\dialects\
,并将 xugu-dialect 目录重命名为 mysql。
Sequelize 内部代码限制了支持的数据库,不在支持列表的数据库会报不支持的错误,因此 XuguDB Sequelize 需要占用 mysql 目录位置并且后续的操作方式也会与 mysql 一致。
(建议将原有的 mysql 目录重命名为 mysql-bak 以免覆盖文件)将 XuguDB Node.js 驱动文件夹放置
\node_modules\sequelize\lib\dialects\abstract\
目录下。编辑 .env 文件与 database.js 文件,配置 XuguDB 连接信息。
编辑 .env 文件配置 XuguDB 连接信息。
js
DB_NAME=SYSTEM
DB_USER=SYSDBA
DB_PASSWORD=SYSDBA
DB_HOST=192.168.2.216
DB_PORT=5138
编辑 database.js 配置方言信息。
js
const { Sequelize } = require('sequelize');
require('dotenv').config();
const sequelize = new Sequelize(
process.env.DB_NAME, // 库名
process.env.DB_USER, // 用户名
process.env.DB_PASSWORD, // 口令
{
host: process.env.DB_HOST, // 数据库IP
dialect: 'mysql', // 此处因为Sequelize 内部代码限制了支持的数据库,所以占用了 mysql 分支
logging: false // 关闭原始SQL日志
}
);
module.exports = sequelize;
提示
未配置端口信息的情况下,方言包会自动使用默认端口 5138 创建连接。
二、连接示例程序
本章节将介绍在 Sequelize 应用连接 XuguDB 。
2.1 前提条件
- 已安装 Node.js。
- 已安装 Sequelize。
- 已部署 XuguDB 12.0.0 或有能连接访问的虚谷数据库实例。
2.2 操作步骤
2.2.1 编写数据库连接信息与引擎信息
根据 方言包使用说明 中配置说明配置数据库连接信息与引擎信息。
编辑 .env 文件配置 XuguDB 连接信息。
txt
DB_NAME=SYSTEM
DB_USER=SYSDBA
DB_PASSWORD=SYSDBA
DB_HOST=192.168.2.216
DB_PORT=5138
编辑 database.js 配置方言信息。
js
const { Sequelize } = require('sequelize');
require('dotenv').config();
const sequelize = new Sequelize(
process.env.DB_NAME, // 库名
process.env.DB_USER, // 用户名
process.env.DB_PASSWORD, // 口令
{
host: process.env.DB_HOST, // 数据库IP
dialect: 'mysql', // 此处因为Sequelize 内部代码限制了支持的数据库,所以占用了 mysql 分支
logging: false // 关闭原始SQL日志
}
);
module.exports = sequelize;
2.2.2 定义表模型
js
// 定义模型
const { DataTypes } = require('sequelize');
const sequelize = require('../config/database');
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
},
email: {
type: DataTypes.STRING,
unique: true,
allowNull: false
},
age: {
type: DataTypes.INTEGER,
validate: {
min: 0
}
}
}, {
tableName: 'users',
timestamps: true
});
return User;
}
2.2.3 定义增删改查等数据库基础操作
js
const { User } = require('../models');
class UserService {
// 创建用户
static async createUser(userData) {
return await User.create(userData);
}
// 获取所有用户
static async getAllUsers() {
return await User.findAll();
}
// 通过ID获取用户
static async getUserById(id) {
return await User.findByPk(id);
}
// 更新用户
static async updateUser(id, updateData) {
const user = await User.findByPk(id);
if (!user) return null;
return await user.update(updateData);
}
// 删除用户
static async deleteUser(id) {
const user = await User.findByPk(id);
if (!user) return null;
await user.destroy();
return true;
}
}
module.exports = UserService;
三、常见问题&解决办法
在使用 Sequelize 连接 XuguDB 时,可能会遇到各种错误。以下列举一些常见的错误及其处理方法。
3.1 was compiled against a different Node.jsversion using
XuguDB Node.js 驱动版本与 Node.js 不兼容,更换兼容版本。
3.2 Error: The dialect unknown_dialect is not supported
没有替换 mysql 引擎目录或者 database.js 中填入了错误引擎名称。 Sequelize 只支持 mssql, mariadb, mysql, postgres, and sqlite 引擎。