node.js - 没有传递 Sequelize 实例

标签 node.js sequelize.js

我正在尝试从 dbController 中外包 dbInit 函数的模型,因为我有几个模型使得 dbController 变得很大。

所以我从我的 db_controller.js 调用 initDb ,它看起来像这样(我使用那个文档 http://docs.sequelizejs.com/manual/getting-started.html )

const userModel = require('../model/user')
const subjectModel = require('../model/subject')
const Sequelize = require('sequelize')
const seq = new Sequelize({
  dialect: 'sqlite',
  storage: './user.db'
})

async function initDb () {
  await userModel.user.initUser()
  await subjectModel.subject.initSubject()
  userModel.user.userClass.hasMany(subjectModel.subject.subjectClass)
}

user.js 中的用户如下所示:

const Sequelize = require('sequelize')
const seq = new Sequelize({
  dialect: 'sqlite',
  storage: './user.db'
})

class User extends Sequelize.Model {
}

exports.user = {
  initUser: initUser,
  userClass: User
}

async function initUser () {
  return new Promise(resolve => {
    User.init(
      // attributes
      {
        firstName: {
          type: Sequelize.STRING,
          allowNull: false
        },
        lastName: {
          type: Sequelize.STRING,
          allowNull: false
        },
        email: {
          type: Sequelize.STRING,
          allowNull: false
        }
      },
      // options
      {
        seq,
        modelName: 'user'
      }
    )
    resolve()
  })
}

对于 subject.js 来说几乎相同

const Sequelize = require('sequelize')
const sequelize = new Sequelize({
  dialect: 'sqlite',
  storage: './user.db'
})

class Subject extends Sequelize.Model {
}

exports.subject = {
  initSubject: initSubject,
  subjectClass: Subject
}

async function initSubject () {
  return new Promise(resolve => {
    Subject.init(
      // attributes
      {
        name: {
          type: Sequelize.STRING,
          allowNull: false
        }
      },
      // options
      {
        seq: sequelize,
        modelName: 'subject'
      }
    )
    resolve()
  })
}

因此,当我尝试通过 node db_controller.js 执行此操作时

我收到此错误(已缩短)

(node:12444) UnhandledPromiseRejectionWarning: Error: No Sequelize instance passed
    at Function.init (D:\Git\ppb\node_modules\sequelize\lib\model.js:915:13)
    at resolve (D:\Git\ppb\src\model\user.js:26:10)
    at new Promise (<anonymous>)
    at Object.initUser (D:\Git\ppb\src\model\user.js:25:10)
    at initDb (D:\Git\ppb\src\controller\db_controller.js:18:24)
    at Object.<anonymous> (D:\Git\ppb\src\controller\db_controller.js:45:1)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)

非常感谢您提前提供的任何建议!

最佳答案

我认为您在选项中传递 seq 而不是 sequelize 很奇怪。

在此处查看文档 http://docs.sequelizejs.com/我在示例中看到它们传递了属性 sequelize 而不是 seq

所以我建议更改:

{
  seq: sequelize,
  modelName: 'subject'
}

{
  sequelize: sequelize,
  modelName: 'subject'
}

关于node.js - 没有传递 Sequelize 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55775328/

相关文章:

node.js - 如何使用node-mysql而不将所有行加载到内存中?

javascript - Node.js中的内存泄漏-如何分析分配树/根?

javascript - 如何异步加载 webpack 包,但按顺序执行?

node.js - 为 docker 镜像生成 .env 文件

node.js - 如何使用带有属性的包含与 Sequelize ?

javascript - session 模型-创建日程方法(Sequelize)

mysql - Sequelize 迁移服务器连接两个数据库

sequelize.js - 使用bulkCreate后与模型创建重复键

mysql - 为什么sequelize在没有实例的情况下无法调用increment?

json - 返回 JSON 中的嵌套对象时出现问题