【发布时间】: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