我正在尝试以模块化的方式配置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([])
})
然而,当我启动我的应用程序时,路由器中间件是第一个被启动的,并且它无法实例化数据库连接,因为sequelize,在app.use
应用中间件后调用init()。
显然,我有一个订单错误,我需要我的模块。我想知道是否有办法解决这个问题,如果有更合理的方式启动我的续集数据库连接作为第一步。
谢谢。
答案 0 :(得分:0)
稍后通过require
修改此路线,如下所示:
app.use('/v2', require('./routes/people'))
完美地工作:)