首页 > 解决方案 > 在 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 本机驱动程序一起使用。所以我需要访问我的控制器中的数据库。

标签: javascriptnode.jsmongodbexpress

解决方案


给出说明后,您可以在 中初始化数据库连接,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(...);
    }
    ...
}

推荐阅读