我的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);
});
};
答案 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);
});
关于中间件订单声明的注意事项。必须首先定义打开连接的中间件,然后是所有路由,最后一个 - 关闭连接的中间件。