仅对所有请求打开一次DB连接

时间:2016-05-25 16:29:27

标签: node.js express

在我的下面代码中,我试图在“/ post”请求之前打开数据库连接。我可以使用全局连接解决以下问题,但是有没有其他方法可以通过将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);

1 个答案:

答案 0 :(得分:0)

假设您使用Express 4只是建议我使用Router对象而不是app。但无论如何,如果你为你的数据库创建一个模块,它将把实例保存在其中,只需从我的github repo here下拉一个样本。

如果您仔细研究一下,您会注意到如果您将数据库作为模块,那么在创建应用程序时调用初始化函数会为其提供遵循微观所需的抽象功能。服务架构架构以及为您提供单一连接呼叫,因此您不必经常关闭/打开。

下面的

是database.js文件

&#13;
&#13;
.imageDiv  {
  width: 30%;
  height: 100%;
  float: left;
  vertical-align: middle;
}

.image {
  width: 100%;
  height: 100%;
}

.text {
  width: 70%;
  float:left;
}
DIV.box {
      BORDER-TOP: #e3f7fa 0px solid;
      HEIGHT: 150px;
      BORDER-RIGHT: #e3f7fa 0px solid;
      WIDTH: 40%;
      BORDER-BOTTOM: #e3f7fa 0px solid;
      FLOAT: right;
      CLEAR: none;
      BORDER-LEFT: #e3f7fa 0px solid;
      MARGIN: 0px 1% 1% 0px
    }
&#13;
&#13;
&#13;

你可以看到我们在初始化函数中导出了initialDb函数和exports.db。所有模块共享一个具有相同模块的实例,这就是db引用有效的原因。

没有理由继续传递实例,只是在重构或查找错误时才会引起注意。你可以在合理范围内提取摘要。