Sequelize的实例没必要共用吗?

发布于 2022-09-12 00:37:47 字数 196 浏览 17 评论 0

小白初学者,不要见笑~
看到很多文章,在使用sequelize的时候,一般新建一个连接数据库的文件,例如db.js,里面new Sequelize()并导出sequelize实例。每个model都是一个单独的文件,每个文件都需要导入db.js
请问,这样是不是会反复建立新的连接?谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怎言笑 2022-09-19 00:37:47

其实你这个问题和会不会重复建立连接池无关,而是和CommonJS模块加载相关的问题;

如果你了解koa,你可以像我这样写一个demo,去体会commonJs的加载过程

// config.js
const date = (() => {
    console.log('init');
    return  new  Date();
})();

module.exports = {
   date,
}
// 404.js
const { date, } = require('../configs');

module.exports = async (ctx, next)=> {  
    ctx.body = '404 page!';
    console.log('date', date.getTime());
    await next();
}
// hello.js
const { date, } = require('../configs');

module.exports = async (ctx, next)=> {  
    ctx.body = 'hello page!';
    console.log('date', date.getTime());
    await next();
}

然后在router中去引用上面两个处理函数:

const page = new Router()
page.get('/404', notFount)
  .get('/helloworld', helloworld)

最后你去访问,然后发现,date的只会声明一次,而且404和hello两个文件,指向的是同一个date,发现他们打印的时间戳完全一样;所以,并不会出现你想的那种情况;

结论是:commonJs不同文件加载同一个模块,这个模块只会被声明一次,下一次加载时,其实加载的是这个文件的缓存;done!!!

扎心 2022-09-19 00:37:47

理论上来说,一个事务处理一件事情,一个连接可以有多个事务。

但是连接尽量使用连接池来管理,用完即回收(到连接池)。

至于 Sequelize 是怎么处理连接池这个问题,我没去研究,印象中它是有连接池管理功能的。

心凉 2022-09-19 00:37:47

从模块的角度来说,多次引用并不会直接产生多个实例,所以理论上如果你在 db.js 里建立连接,那么多次 import 也不会有多个连接。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文