LoginSignup
1
0

More than 1 year has passed since last update.

Express MongoDB コネクションプール

Posted at

MongoDBの定義

データベース=test_db
collection=user
※userドキュメントに2つデータがある
image.png
image.png

ソース

index.js
var express = require("express");
var app = express();

const MongoClient = require('mongodb').MongoClient;

const testRouter = require('./routers/test');

MongoClient.connect('mongodb://db', { minPoolSize: 20, maxPoolSize: 20 }, async (error, client) => {
  if (error) {
    console.log('error :', error);
  } else {
    // req.app.locals.dbでアクセスできるように設定
    app.locals.db = client.db('test_db');
    // add Router
    app.use('/test', testRouter);
    // start express server
    var server = app.listen(3000, function(){
      console.log("Node.js is listening to PORT:" + server.address().port);
    });
  }
})
routers/test.js
var express = require('express')
var router = express.Router()

router.get('/', async (req, res) => {
  // connection poolを使いまわし
  const result = await res.app.locals.db.collection('user').find().toArray();
  res.send(result.map(row => row.name).join(','));
})
module.exports = router

起動確認

localhost:3000/testにアクセス
image.png

Connectionをクローズしていないけど問題ないか確認

  1. アプリ起動前のmongoのプロセス数を確認
    image.png

  2. アプリ起動後のプロセス数を確認
    image.png
    ※poolのサイズを20に設定しているが、なぜか22作られるのはなぞ。

  3. localhost:3000/testに複数回アクセス後のmongoプロセスを確認
    image.png

  4. nodeのプロセス終了後のmongoプロセスを確認
    image.png

info nodeのプロセスが切れると、close()関数を呼んでいなくても自動で解放されるっぽい ※公式でもcloseしてないので問題ないと思います。

github

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0