2016-05-25 2 views
0

В моем нижнем коде я пытаюсь открыть соединение с БД до запроса «/ post». Я могу решить проблему ниже, используя глобальное соединение, но есть ли другой способ сделать это, просто привязывая db-соединение к текущему запросу.Открывать соединение DB только один раз для всех запросов

//Model.js 
function DB(){ 
    this.DBConn (req, res, next) { 
     var conn = <db connection string>; 
     pg.connect(conn, function (err, client) { 
     req.db = client; 
     }) 
    this.create (req, res, next) { 
     // Using req.db.query(), to execute INSERT query 
     } 
    } 
} 
//server.js 
var DB = require('./model.js'); 
var app = express.Router(); 
// Open DB connection 
new DB.DBConn(); //How to pass request in this function 
app.post('/post', DB.create); 

ответ

0

Предполагаете, что вы используете Express 4 только для того, чтобы использовать объект Router вместо приложения. Но независимо от того, если вы создадите модуль для своего db, он будет содержать экземпляр внутри него, просто вытащите образец из моего github repo here.

Если вы посмотрите на него, вы заметите, что если вы сделаете базу данных модулем, тогда у вас есть функция инициализации, которая вызывается при создании вашего приложения, она дает ему абстракцию, необходимую для выполнения микросервиса схемы архитектуры вместе с предоставлением вам единого вызова соединения, чтобы вы не постоянно закрывали/открывали.

ниже является database.js файл

var mongodb = require('mongodb'); 
 

 
var uri = 'some database connection string for mongodb '; 
 

 
function initilizeDb(cb) { 
 
    mongodb.connect(uri, function(err, db) { 
 
    if (err) { 
 
     cb(err); 
 
     return; 
 
    } 
 

 
    exports.db = db; //this is the part you need to do in sql connection or w.e after you get the async connection handler. 
 
    cb(null); 
 
    }); 
 
}; 
 

 
exports.initDb = initilizeDb;

, как вы можете видеть, мы экспортируем функцию initialDb и exports.db внутри инициализирован функции. все модули совместно используют экземпляр с тем же модулем, поэтому ссылка db действительна.

Нет причин для того, чтобы проходить мимо экземпляра, он просто приносит слои, чтобы следить за тем, когда вы рефакторинг или ищете ошибки. Тезисы как можно больше - в пределах разума.

Смежные вопросы