javascript - 在 Nodejs 中使用数据库引用作为全局变量或类似模块的单独服务?
问题描述
在全局变量中初始化数据库引用是一种好习惯吗?
globals.database = client.db(config.dbName);
或者我应该为此创建单独的模块并像这样导出变量 -
exports.globals = {
database: null
}
并导入控制器 -
const db= require('./globals').database;
exports.postData = function(req, res) {
const db = globals.database;
我正在将 Node.js 与 MongoDB 本机驱动程序一起使用。所以我需要访问我的控制器中的数据库。
解决方案
给出说明后,您可以在 中初始化数据库连接,index.js
然后将其作为参数传递给需要它的控制器方法。
不确定是否更好,但我也使用@Thuvarakan 的策略:在这种情况下,您的连接在索引中初始化,传递给 DB 模块,然后在控制器询问时用于访问 DB。
const connection = client.db(config);
const dbAccessLayer = new DbLayer(connection);
const controller = new Controller(dbAccessLayer);
控制器看起来像:
class Controller {
constructor(dbAccess) {}
insertData(data, cb) {
// Make checks, apply business logic
this.dbAccess.insertData(data, cb);
}
...
}
最后,数据库访问层如下所示:
class DbAccess {
constructor(conn) {}
insertData(data, cb) {
conn.insert(...);
}
...
}
推荐阅读
- c# - 在 RazorPage 中引用来自另一个项目的类
- linux - 在 docker 图像上使用 curl 而不是 wget
- c# - 如何在 C# 中转换 dateTime 格式?
- laravel - 如何像在 Provider 中注册路由一样,分别为所有模块注册 graphql?
- apache - 使 .htaccess 在符号链接目标文件夹中工作
- django-rest-framework - django_filters 只需要适用于列表操作
- c++ - 是否可以防止遗漏聚合初始化成员?
- forms - 如何在 Symfony 表单中添加单选按钮
- python - 将多列而不是现有的一列插入到熊猫数据框中
- django - 修改递归自关系的默认查询集