如何使用快速路由器

时间:2016-01-11 03:04:38

标签: node.js mongodb express connection router

我有一个快速路由器,如:

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(),但这不是我的代码中使用的实际语法。

1 个答案:

答案 0 :(得分:0)

  

当您的应用程序启动并重用db对象时,您打开一次MongoClient.connect。它不是单独的连接池,每个.connect都会创建一个新的连接池。

来自node-mongodb-native

就个人而言,我这样做

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() {}