Использование ссылки на базу данных в качестве глобальной переменной или отдельного модуля, подобного сервису, в Nodejs? - PullRequest
0 голосов
/ 19 сентября 2019

Это хорошая практика для инициализации ссылки на базу данных в глобальной переменной.

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.Поэтому мне понадобится доступ к базе данных на моем контроллере.

1 Ответ

0 голосов
/ 21 сентября 2019

Учитывая разъяснение, вы можете инициализировать соединение с БД в index.js и затем передать его в качестве аргумента методам контроллера, которым это необходимо.

Не уверен, что это лучше, но я также использую @Стратегия Thuvarakan: в этом случае ваше соединение инициализируется в индексе, передается модулю БД, а затем используется для доступа к БД по запросу контроллера.

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(...);
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...