2016-04-02 1 views
1

В настоящее время я пишу проект node.js, где я определил и создал экземпляр переменной rethinkdb в основном классе ES6.Лучший способ поделиться экземпляром переменной между несколькими классами?

Мой вопрос - лучший способ совместного использования переменной базы данных среди всех последующих классов проектов без повторной копии одной и той же переменной или создания другого соединения db? «Глобальная» переменная.

Что-то вроде этого единственный способ? В любом случае, чтобы определить ее как глобальную?

const db = require('rethinkdb'); 
db.connect({ 
         host: config.db.host, 
         port: config.db.port, 
         authKey: config.db.authkey, 
         ssl: { 
          ca: content 
         } 
        }, function(err, conn) { 
         if(err) { 
          fail(err) 
         } else { 
          success(conn) 
         } 


         }); 

new ClassName(db); 

EDIT:

Я мог бы также рассмотреть вопрос о принятии класса DB, где переменная БД одноэлементно? Это лучший способ?

+0

Положить его в модуль? – Bergi

+0

использовать модуль для хранения переменных – commonSenseCode

+0

Если целью является совместное использование соединения между модулями, этот вопрос и ответ могут помочь: http://stackoverflow.com/questions/30356148/how-can-i-use-a-single- mssql-connection-pool-through-multiple-routes-in-an-express –

ответ

0

Вы можете использовать module.exports, поэтому ваша переменная db должна быть в этом объекте.

module.exports = { 
    db: require("rethinkdb") 
} 
module.exports.db.connect(...); 

Теперь я забыл, если module.exports имеет встроенную функцию, которая работает каждый модуль требуется require, но таким образом он должен работать нормально.

+0

Почему не модули ES6? – Bergi

+0

Это легко перевести. Здесь он заменяет 'module.exports = {...}' на 'export const db = require (" rethinkdb ");'. И я не уверен, но, чтобы вызвать 'module.exports.connect (...)', вы можете просто выполнить 'db.connect (...);', в случае ES6 – boxHiccup

+0

Конечно, это легко перевести, это просто, что вопрос помечен ES6, поэтому я бы рекомендовал использовать его в ответах :-) – Bergi