teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2018/06/12 07:17

投稿

mosapride
mosapride

スコア1480

answer CHANGED
@@ -1,3 +1,34 @@
1
1
  connectのみをしclose処理をしていないためmongodbの最大同時接続数に到達し、それ以上は接続できないためエラーが発生しているのではないでしょうか?
2
2
 
3
- close処理を入れるか、connectしたobjectを使い回す(singleton)ようにすればエラーを回避することができると思いますよ。
3
+ close処理を入れるか、connectしたobjectを使い回す(singleton)ようにすればエラーを回避することができると思いますよ。
4
+
5
+
6
+ ## 追記
7
+
8
+ 基本的な使い方まマニュアルに載ってますね。
9
+
10
+ [https://docs.mongodb.com/manual/tutorial/atlas-free-tier-setup/](https://docs.mongodb.com/manual/tutorial/atlas-free-tier-setup/)
11
+
12
+ ```ts
13
+ var MongoClient = require('mongodb').MongoClient;
14
+
15
+ var uri = "mongodb://user123:p455w0rd@gettingstarted-shard-00-00-hyjsm.mongodb.net:27017,gettingstarted-shard-00-01-hyjsm.mongodb.net:27017,gettingstarted-shard-00-02-hyjsm.mongodb.net:27017/test?ssl=true&replicaSet=GettingStarted-shard-0&authSource=admin";
16
+ MongoClient.connect(uri, function(err, db) {
17
+ // Paste the following examples here
18
+
19
+ db.close();
20
+ });
21
+ ```
22
+
23
+ > この場合最後のコールバック関数時(res.render)に、myDB.close()とすれば一括で閉じることはできるのでしょうか?
24
+
25
+ catchでエラーページに飛ぶときのみcloseしても正常時にはcloseしないことになるのでfinallyが妥当です。
26
+
27
+ ```ts
28
+ }catch(e){
29
+  console.log(e);
30
+ res.render('../views/Erro.ejs');
31
+ } finally {
32
+ database.close(); // ←こっち
33
+ };
34
+ ```