ORM工具 Sequelize: No Sequelize instance passed
异常:No Sequelize instance passed
- 异常描述:
- 参照官方文档,使用Model.init模型定义后,启动项目抛出异常。使用sequelize.define 定义模型,项目正常
- 链接实例为自定义的链接实例(问题出在此处)
-
异常信息:
-
...\node_modules\sequelize\lib\model.js:662
throw new Error("No Sequelize instance passed");
-
官方文档内容:
const { Sequelize, DataTypes, Model } = require('sequelize'); const sequelize = new Sequelize('sqlite::memory:'); class User extends Model {} User.init({ // 在这里定义模型属性 firstName: { type: DataTypes.STRING, allowNull: false }, lastName: { type: DataTypes.STRING // allowNull 默认为 true } }, { // 这是其他模型参数 sequelize, // 我们需要传递连接实例 modelName: 'User' // 我们需要选择模型名称 }); // 定义的模型是类本身 console.log(User === sequelize.models.User); // true
个人实际代码内容:
const {Sequelize, Model, DataTypes} = require('sequelize'); const mysqlConnection = require('../mysqlConnection').mysqlConnection; class Catalog extends Model { } Catalog.init({ id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true }, project: { type: DataTypes.INTEGER, allowNull: false }, // 在这里定义模型属性 name: { type: DataTypes.STRING, //设置,默认值 //defaultValue:"xxx", //不允许 为null allowNull: false }, summary: { type: DataTypes.STRING // allowNull 默认为 true }, text: { type: DataTypes.TEXT, // allowNull 默认为 true } }, { // 这是其他模型参数 mysqlConnection, // 我们需要传递连接实例
// 我们需要选择模型名称 表名称 modelName: 'catalog', tableName: "catalog", // 不要默认时间戳 数据库没有时间戳字段时,设置为false,否则报错 SequelizeDatabaseError: Unknown column 'createdAt' in 'field list' timestamps: false, freezeTableName: true });
此时实际代码抛出异常信息:throw new Error("No Sequelize instance passed");
解决办法:
修改标红处代码为:
sequelize: mysqlConnection, // 我们需要传递连接实例