我有一个快速路由器,如:
var express = require('express')
, router = express.Router()
, bodyParser = require('body-parser')
, mongoclient = require('mongodb').MongoClient
, dbconfig = require('../assets/config.db.json');
router.use( bodyParser.json() );
router.use(bodyParser.urlencoded({
extended: true
}));
router.post('/api/search', (req, res, next) => {
var term = req.body.searchTerm;
mongoclient.connect(dbconfig.url, (err, db) => {
db.accessDatabase(term, (err, result) => {
db.close();
if (err) res.json({result: err});
res.json(result);
});
});
});
module.exports = router;
我已经读过,如果每次REST调用连接到我的数据库有很多开销,那么我需要为使用这个REST API的人建立持久连接。在我的路由器中执行此操作的正确方法是什么?现在,每次收到一个帖子请求时,它都会打开一个连接,访问数据库,然后关闭连接。
编辑:为了清楚起见,我使用了db.accessDatabase(),但这不是我的代码中使用的实际语法。
答案 0 :(得分:0)
当您的应用程序启动并重用db对象时,您打开一次MongoClient.connect。它不是单独的连接池,每个.connect都会创建一个新的连接池。
就个人而言,我这样做
var params = {/*config, etc... required to bootstrap models */}
require('./app/models')(params)
.then(afterModels)
.then(startServer)
function afterModels(theModels) {
params.models = theModels
let providers = require('./app/providers')(params)
params.providers = providers
// boot strap routes
require('./app/routes')(params)
// controllers can use params which has models (db object,e tc.. inside)
}
function startServer() {}