javascript - 对于循环行为不符合预期,循环多次[MongoDB,Nodejs]
问题描述
代码:- 1
app.get("/", function(req, res) {
// var whichDay = dayFormated.dayFormated();
//
// console.log(whichDay);
Item.find({}, function(err, itemsFound) {
if (itemsFound.length === 0) {
console.log(itemsFound.length);
console.log("i Am Here if condition.");
Item.insertMany(defaultItems, function(err) {
console.log("I am inside insertMany");
if (err) {
console.log(err);
} else {
console.log("Successfully inserted default values to DB");
}
});
**res.redirect('/');**
console.log("exiting if bye :P");
} else {
console.log("back again at redirect");
// console.log(itemsFound);
res.render('list', {
titleToDoList: "Today",
itemslist: itemsFound
});
}
});
});
控制台日志:- 1
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
0
i Am Here if condition.
exiting if bye :P
I am inside insertMany
Successfully inserted default values to DB
back again at redirect
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
I am inside insertMany
{ BulkWriteError: E11000 duplicate key error collection: todolistDB.items index: _id_ dup key: { _id: ObjectId('5f55f40136e7195ed7614bbb') }
at OrderedBulkOperation.handleWriteError (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:1257:9)
at resultHandler (My_Project_Directorynode_modules/mongodb/lib/bulk/common.js:521:23)
at handler (My_Project_Directorynode_modules/mongodb/lib/core/sdam/topology.js:942:24)
at fn (My_Project_Directorynode_modules/mongodb/lib/cmap/connection_pool.js:356:13)
at handleOperationResult (My_Project_Directorynode_modules/mongodb/lib/core/sdam/server.js:558:5)
at MessageStream.messageHandler (My_Project_Directorynode_modules/mongodb/lib/cmap/connection.js:277:5)
at MessageStream.emit (events.js:198:13)
at processIncomingData (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:144:12)
at MessageStream._write (My_Project_Directorynode_modules/mongodb/lib/cmap/message_stream.js:42:5)
at doWrite (_stream_writable.js:415:12)
at writeOrBuffer (_stream_writable.js:399:5)
at MessageStream.Writable.write (_stream_writable.js:299:11)
at Socket.ondata (_stream_readable.js:710:20)
at Socket.emit (events.js:198:13)
at addChunk (_stream_readable.js:288:12)
at readableAddChunk (_stream_readable.js:269:11)
name: 'BulkWriteError',
driver: true,
code: 11000,
writeErrors: [ WriteError { err: [Object] } ],
result:
BulkWriteResult {
result:
{ ok: 1,
writeErrors: [Array],
writeConcernErrors: [],
insertedIds: [Array],
nInserted: 0,
nUpserted: 0,
nMatched: 0,
nModified: 0,
nRemoved: 0,
upserted: [] } },
insertedDocs:
[ { _id: 5f55f40136e7195ed7614bbc, itemName: 'Wakeup', __v: 0 },
{ _id: 5f55f40136e7195ed7614bbd, itemName: 'Bath', __v: 0 } ] }
代码:- 2
Item.find({}, function(err, itemsFound) {
if (itemsFound.length === 0) {
console.log(itemsFound.length);
console.log("i Am Here if condition.");
Item.insertMany(defaultItems, function(err) {
console.log("I am inside insertMany");
if (err) {
console.log(err);
} else {
console.log("Successfully inserted default values to DB");
**res.redirect('/');**
}
});
console.log("exiting if bye :P");
} else {
console.log("back again at redirect");
// console.log(itemsFound);
res.render('list', {
titleToDoList: "Today",
itemslist: itemsFound
});
}
});
});
控制台日志:- 2
[nodemon] 2.0.4
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node app.js`
server running on port 3000
0
i Am Here if condition.
exiting if bye :P
I am inside insertMany
Successfully inserted default values to DB
back again at redirect
代码 2 运行良好,但代码 1 循环多次。有人可以向我解释为什么代码一循环多次吗?我将代码的位置加粗以检查参考。谢谢!。
查看我粘贴的日志,其中解释了该场景。
解决方案
添加为答案,因为无法发表评论。
代码 1 循环多次,因为res.redirect('/')
在Item.insertMany
.
这是 nodejs 异步行为的经典示例。当代码到达 mongo 查询时,它会触发回调并进入回调队列等待来自数据库的响应。
所以 nodejs 移动到回调之外的下一个代码块,即res.redirect('/')
. 这使得代码'/'
再次调用端点。并且直到插入数据库操作完成(这将使长度大于 0),您的代码始终会找到长度为 0 并/
在循环中不断命中端点。
推荐阅读
- javascript - 如何在 AG-Grid 中设置列的动态字段?
- java - 特定项目没有控制台输出 - Java Eclipse
- python - 如何封装将控制台打印到 Word 的方法
- powershell - 脚本作为本地系统运行时的额外字符
- reporting-services - 在 SSRS 报告表中,有没有办法拥有两组重复组?
- go - WebsocketServer:向连接的客户端发送事件消息
- string-concatenation - 可以在 ArnoldC 中连接整数和字符串吗?
- javascript - 如何在此表中添加特定的 OnClick 侦听器?
- plsql - Oracle APEX - 语言更改时查询中缺少列
- javascript - VUE.JS/HTTP。使用 vue.js 将 http 查询结果获取到 html 的问题