【问题标题】:Trouble requiring sequelize model with express需要用 express 续集模型的麻烦
【发布时间】:2017-03-28 16:14:31
【问题描述】:

我正在尝试以模块化方式配置 sequelize,但在需要我的模型时遇到了问题。

我有以下初始化代码:

// sequelize.js
module.exports = {
  init() {
    if (!db) {
      db = new Sequelize(database, username, password, {
        host,
        dialect
      })
      db
        .authenticate()
        .then(() => {
          logging.info('Connection has been established successfully.')
        })
        .catch((err) => {
          logging.error(`Unable to connect to the database: ${err}`)
        })
      return Promise.resolve(db)
    }
    return Promise.resolve(db)
  },
  define(...args) {
    if (db) {
      return db.define(args)
    }
    throw new Error('init the db first before defining models')
  }
}

这是我的模型:

'use strict'
import Sequelize from 'sequelize'
import sequelize from '../sequelize'

const User = sequelize.define('user', {
  email: Sequelize.STRING
})

export default User

在我的快递应用程序中,我这样做:

import { user } from './routes'

sequelize.init()
  .then(() => {
    app.use('/v2', user)
    ...
  })

在用户路线中我有这个:

import express from 'express'

const router = express.Router()
import User from '../models/user'

router.get('/users', (req, res) => {
  res.json([])
})

但是,当我启动我的应用程序时,路由器中间件是第一个被启动的中间件,并且它无法实例化数据库连接,因为在 app.use 完成应用中间件之后调用了 sequelize,init()。 显然,我对模块的需求方式有一个排序错误。我想看看是否有办法解决这个问题,以及是否有更合乎逻辑的方式来启动我的 sequelize db 连接作为第一步。

谢谢。

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    稍后通过requireing 路由修复此问题,如下所示:

    app.use('/v2', require('./routes/people'))

    完美运行:)

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 2012-08-25
      • 2015-07-27
      • 2012-01-29
      • 1970-01-01
      相关资源
      最近更新 更多