Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


Sequelize 使用手册

📄字数 2.6K
👁️阅读量 加载中...

Sequelize 是一个基于 promise 的 Node.js ORM 框架,它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能。本文档将介绍 XuguDB 对 Sequelize 框架的适配情况,并简易描述使用 Sequelize 开发 XuguDB 应用的 Demo 指南。

框架名称适配起始版本官网地址源框架下载地址XuguDB框架下载demo程序地址
Sequelize6.37.3Sequelize官网-版本发布列表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 引擎。