質問編集履歴

2

誤記を修正しました。

2019/06/10 14:59

投稿

octo
octo

スコア17

test CHANGED
File without changes
test CHANGED
@@ -122,7 +122,15 @@
122
122
 
123
123
 
124
124
 
125
+ インスタンス化した1つのMongoClientを接続したり切断したりすることはできないのでは?と考え、いくつかの修正案を試行しました。
126
+
127
+ 正常に動作する方法をいくつか見つけましたが、やりたいこと(Webアプリケーションサーバ)に対して適切な方法であるのか不安があります(POSTに応じて同じデータベースに何度も保存を行う場合、適切にインスタンス化してそれを保持することで接続を速められる?)。
128
+
129
+
130
+
131
+ [修正案1]
132
+
125
- インスタンス化した1つMongoClientを接続したり切断したりすることはできないのでは?と考え、インスタンス化の場所をapp.post内に移したところ、1度目のPOSTだけでなく2度目以降も正常に動作しました。この方法だと、POSTの度にインスタンスを作成するように思い、適切なのか不安があります。
133
+ インスタンス化の場所をapp.post内に移したところ、1度目のPOSTだけでなく2度目以降も正常に動作しました。この方法だと、POSTの度にインスタンスを作成するように思い、適切なのか不安があります。
126
134
 
127
135
 
128
136
 
@@ -166,6 +174,8 @@
166
174
 
167
175
 
168
176
 
177
+ [修正案2]
178
+
169
179
  次に、いくつかのサイトで見かけたインスタンスを作成しない方法を試しました。これも正常に動作しました。特に非効率がないのであれば、この方法でも構わないのでしょうか。
170
180
 
171
181
  ```
@@ -186,7 +196,7 @@
186
196
 
187
197
  const col = client.db(dbName).collection('test');
188
198
 
189
- col.insertOne({"count":count, "text":text},function(err,doc){
199
+ col.insertOne({"text":text},function(err,doc){
190
200
 
191
201
  assert.equal(null, err);
192
202
 
@@ -194,8 +204,6 @@
194
204
 
195
205
  console.log("closed correctly.");
196
206
 
197
- count++;
198
-
199
207
  res.send("saved successfully.");
200
208
 
201
209
  });

1

不十分な点があったので質問文を加筆しました。

2019/06/10 14:59

投稿

octo
octo

スコア17

test CHANGED
File without changes
test CHANGED
@@ -38,7 +38,9 @@
38
38
 
39
39
  とのAssertionErrorが発生してアプリが終了してしまいます。
40
40
 
41
-
41
+ 適切な修正方法がわからず困っています。
42
+
43
+ ご教授いただければ幸いです。
42
44
 
43
45
  ### 該当のソースコード
44
46
 
@@ -86,6 +88,96 @@
86
88
 
87
89
  var text = req.body.text;
88
90
 
91
+ client.connect(function(err, client){
92
+
93
+ assert.equal(null,err);
94
+
95
+ console.log("connected correctly.")
96
+
97
+ const col = client.db(dbName).collection('test');
98
+
99
+ col.insertOne({"text":text},function(err,doc){
100
+
101
+ assert.equal(null, err);
102
+
103
+ client.close(function(){
104
+
105
+ console.log("closed correctly.");
106
+
107
+ res.send("saved successfully.");
108
+
109
+ });
110
+
111
+ });
112
+
113
+ });
114
+
115
+ });
116
+
117
+ ```
118
+
119
+
120
+
121
+ ### 試したこと
122
+
123
+
124
+
125
+ インスタンス化した1つのMongoClientを接続したり切断したりすることはできないのでは?と考え、インスタンス化の場所をapp.post内に移したところ、1度目のPOSTだけでなく2度目以降も正常に動作しました。この方法だと、POSTの度にインスタンスを作成するように思い、適切なのか不安があります。
126
+
127
+
128
+
129
+ ```
130
+
131
+ //修正案1
132
+
133
+ app.post("/", function(req, res, next){
134
+
135
+ var text = req.body.text;
136
+
137
+ const client = new MongoClient(url, { useNewUrlParser: true });
138
+
139
+ client.connect(function(err, client){
140
+
141
+ assert.equal(null,err);
142
+
143
+ console.log("connected correctly.")
144
+
145
+ const col = client.db(dbName).collection('test');
146
+
147
+ col.insertOne({"text":text},function(err,doc){
148
+
149
+ assert.equal(null, err);
150
+
151
+ client.close(function(){
152
+
153
+ console.log("closed correctly.");
154
+
155
+ res.send("saved successfully.");
156
+
157
+ });
158
+
159
+ });
160
+
161
+ });
162
+
163
+ });
164
+
165
+ ```
166
+
167
+
168
+
169
+ 次に、いくつかのサイトで見かけたインスタンスを作成しない方法を試しました。これも正常に動作しました。特に非効率がないのであれば、この方法でも構わないのでしょうか。
170
+
171
+ ```
172
+
173
+ //修正案2
174
+
175
+ //const client = new MongoClient(url, { useNewUrlParser: true });は記述しない。
176
+
177
+ app.post("/", function(req, res, next){
178
+
179
+ text = req.body.text;
180
+
89
181
  MongoClient.connect(url, function(err, client){
90
182
 
91
183
  assert.equal(null,err);
@@ -94,7 +186,7 @@
94
186
 
95
187
  const col = client.db(dbName).collection('test');
96
188
 
97
- col.insertOne({"text":text},function(err,doc){
189
+ col.insertOne({"count":count, "text":text},function(err,doc){
98
190
 
99
191
  assert.equal(null, err);
100
192
 
@@ -102,6 +194,8 @@
102
194
 
103
195
  console.log("closed correctly.");
104
196
 
197
+ count++;
198
+
105
199
  res.send("saved successfully.");
106
200
 
107
201
  });
@@ -116,48 +210,6 @@
116
210
 
117
211
 
118
212
 
119
- ### 試したこと
120
-
121
-
122
-
123
- インスタンス化した1つのMongoClientを接続したり切断したりすることはできないのでは?と考え、インスタンス化の場所をapp.post内に移したところ、正常に動作しました。
124
-
125
- ```
126
-
127
- app.post("/", function(req, res, next){
128
-
129
- var text = req.body.text;
130
-
131
- const client = new MongoClient(url, { useNewUrlParser: true });
132
-
133
- MongoClient.connect(url, function(err, client){
134
-
135
- assert.equal(null,err);
136
-
137
- console.log("connected correctly.")
138
-
139
- const col = client.db(dbName).collection('test');
140
-
141
- col.insertOne({"text":text},function(err,doc){
142
-
143
- assert.equal(null, err);
144
-
145
- client.close(function(){
146
-
147
- console.log("closed correctly.");
148
-
149
- res.send("saved successfully.");
150
-
151
- });
152
-
153
- });
154
-
155
- });
156
-
157
- });
158
-
159
- ```
160
-
161
213
  ### 補足情報(FW/ツールのバージョンなど)
162
214
 
163
215