在API调用期间打开和关闭数据库连接

时间:2017-09-14 18:21:05

标签: javascript node.js mongodb express

我的app.js如下所示。当新请求进入时,mogoDBUtils.getMogoDbCon();将打开数据库连接。我想在对route.js的api调用结束后立即关闭数据库连接。

我需要在app.js中放置代码,以便在下面的代码中关闭MongoDB连接,以便在新的命中时打开连接并在api调用完成后关闭连接。

var express = require('express');
var bodyParser = require('body-parser');

var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.disable('x-powered-by')
var mogoDBUtils = require('./controller/utilities/mongodbutils.js')
var logger = require('./controller/utilities/logger.js'); //initialize logger class

require('./routes/route.js')(app); //define express router for api calls
mogoDBUtils.getMogoDbCon(); //open dbconnection

//setup server
var port = process.env.PORT || 80 // port

app.use(express.static('./views/webcontent/', { index: 'index.html' }))//define home page

app.listen(port);
console.log('Listening on port ' + port + '..');

//数据库功能

module.exports.getMogoDbCon = function() {
  new Promise((resolve, reject) => {
    var mongoUri = getmongouri(); 
    mongoose.connection.openUri(mongoUri);
    var db = mongoose.connection;

    db.on('error', function () {
      throw new Error('unable to connect to database');
    });    
    return resolve(db); 
  });
}; 

module.exports.closeMongoDBConnection = function () {
  new Promise((resolve, reject) => {
    mongoose.disconnect();
    return resolve(true);
  });
};

1 个答案:

答案 0 :(得分:0)

您可以在中间件中执行此操作。如果要在每个请求上打开和关闭连接,则需要创建两个中间件:用于打开连接和关闭它:

我认为getMogoDbCon()closeMogoDbCon会返回一个承诺,否则会使用回调。

app.use((req, res, next) => {
  mogoDBUtils
    .getMogoDbCon()
    .then(conn => {
       req.conn = conn;
       next();
     })
    .catch(next);
});

require('./routes/route.js')(app); // define express router for api calls

app.use((req, res, next) => {
  mogoDBUtils
    .closeMogoDbCon(req.conn)
    .then((() => next())
    .catch(next);
});

关于中间件订单声明的注意事项。必须首先定义打开连接的中间件,然后是所有路由,最后一个 - 关闭连接的中间件。