首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于数据库连接的nodejs单nodejs

用于数据库连接的nodejs单nodejs
EN

Stack Overflow用户
提问于 2016-07-10 16:12:19
回答 1查看 1.3K关注 0票数 3

我只是好奇而已。在nodejs中使用需求和依赖注入打开数据库连接的正确方法是什么?

在php中,我应该将连接作为全局变量中的单例创建一次。然而,这似乎不是节点中的最佳实践。因此,我有以下问题:

  1. 在节点中在哪里打开db连接?
  2. 您是打开一次还是多次打开db连接?
  3. 如何在保持es6模块导入的同时只打开一次db连接?
  4. 如何通过es6模块加载打开多个db连接?
  5. 如果我多次导入相同的数据库,它会导致多个连接吗?
  6. 我非常了解并喜欢控制我的服务器打开了多少连接。例如,如果我编写了一个数据库访问权限较低的后端工作人员,我宁愿在那里只打开一个db连接,作为运行一个快递服务器,我想在每个请求中打开一个连接。我怎样才能做到这一点?

我知道也有类似的问题,但似乎没有完全回答我的问题:

所以我的基本想法是:

代码语言:javascript
复制
/* DbService.js */
var Sequelize = require('sequelize');
module.export = new Sequelize('database', 'username')

模型/实例也是如此

代码语言:javascript
复制
/* Foo.js */
var db = require("DbService.js");
export var Foo = db.define('foo', {...});

并在代码i中加载db / model

代码语言:javascript
复制
/* server.js */

import Foo from './Foo';
Foo.findById('123').then(function(foo) {
    ...
};

var db = require("DbService.js");    
db.query("SELECT * FROM `test`");

然而,在我看来,这总是打开一个独立的db连接,这感觉是不对的。那么你可能会怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-11 08:59:20

  1. 通常情况下,当应用程序被加载,但不一定-例如。您可能需要根据DB上存储的凭据检查身份验证。
  2. 因为您标记了后遗症,所以在创建new Sequelize实例时不是创建单个连接,而是创建连接池。如果您不指定用于池的信任项,则将使用默认情况下最大1连接创建后缀。
  3. 通过创建sequelize (new Sequelize())实例,您只需初始化连接池。当实际需要出现时,实际连接将被创建并保存在池中,比如执行查询。
  4. 您可以创建一个连接池,它可以通过传递适当的池配置选项来处理多个连接。
  5. 假设数据库是指Sequelize实例,由于nodejs的模块缓存的性质,您将始终在同一个实例中结束,因此连接池是相同的。
  6. 一般情况下,每个请求的连接都是个坏主意,因为建立连接相对来说是一种消耗资源的操作。相反,要利用连接池。由于您使用续写,它已经节省了您的时间。

注: ES6模块尚未在nodejs中实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38293900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档