Sequelize如何同步判断数据库连接及同步成功

Hi,各位大佬。
是这样的,目前我希望实现通过sequelize的authenticate方法判断数据库连接是否正常,然后执行各个表的sync方法进行同步,均无问题则执行下面的逻辑代码。
但是在当前模式下,需要通过如下逻辑进行处理

sequelize.authenticate.then(function(){
    User.sync().then(function(){
        Order.sync().then(function(){
            // 大段逻辑代码
        });
    });
});

这样会显得很累赘。
我尝试通过co模块进行如下处理

co( function *() {
    try{
        // Check the database connection
        yield sequelize.authenticate();
        // Sync the tables
        yield User.sync({force: false});
        yield Order.sync({force: false});
        logger.info('Database init successfully.');

    }
    catch (e) {
        logger.error('Database init unsuccessfully!');
        process.exit(1);
    }
});
doSomething();

但是我发现,下面的逻辑代码会先行,达不到我所要的效果。
请问该如何处理目前这种情况呢?
谢谢!

阅读 5.3k
1 个回答

1、数据库连接通过配置连接池来管理,不用特意去判断连接是否正常,因为其会自动进行重连操作
2、sync同步数据库表结构只需要在开始阶段的执行一次即可(只要表结构与你的model对应,其实是不需要sync操作的),这种场景建议使用promise.all(放到app.js里执行):

(async () => {
    try {
        await Promise.all([
            User.sync({force: false}),
            Order.sync({force: false}), 
            // ...      
        ]);
    } catch (error) {
        console.log(error);
    }
})();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题