我试图以模块化的方式配置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,init()在应用中间件完成 app.use
之后被调用 . 显然,我有一个订单错误,我需要我的模块 . 我想看看是否有办法解决这个问题,并且如果有更合理的方式来启动我的续集数据库连接作为第一步 .
谢谢 .
1 回答
通过以后的
require
路由修正了这个:app.use('/v2', require('./routes/people'))
工作得很完美:)