我只是好奇。在需要和依赖注入的nodejs中打开数据库连接的正确方法是什么?
在php中,我会在全局变量中创建一个连接一次作为单例。然而,这似乎不是节点中的最佳实践。因此,我有以下问题:
我知道有类似的问题,但似乎没有完全回答我的问题:
所以我的基本想法是:
/* DbService.js */
var Sequelize = require('sequelize');
module.export = new Sequelize('database', 'username')
与模型/实例相同
/* Foo.js */
var db = require("DbService.js");
export var Foo = db.define('foo', {...});
在代码中我比通过
加载db / model/* server.js */
import Foo from './Foo';
Foo.findById('123').then(function(foo) {
...
};
var db = require("DbService.js");
db.query("SELECT * FROM `test`");
然而在我看来,这总是打开一个单独的数据库连接,这感觉不对。那你怎么能这样做呢?
答案 0 :(得分:1)
new Sequelize
实例时,您不会创建单独的连接,而是创建连接池。如果您没有指定用于汇集续集的配置,则会使用max 1 connection by default创建。new Sequelize()
)的实例,您只需初始化连接池。当出现实际需求(如执行查询)时,将创建实际连接并将其保留在池中。 Sequelize
实例,由于nodejs模块缓存的性质,您总是会在同一个实例中以相同的连接池结束。 注 - 在nodejs中尚未实现的ES6模块。