我正在使用Node.js和MongoDB创建一个用户管理系统,当前正在创建一个微服务来处理CRUD查询。我已经编写了微服务,但是在测试时发现findOneAndUpdate
函数和findOneAndDelete
函数收到相同的错误。我没有收到findOne
函数或insertOne
函数的错误。
这是错误:
C:\Users\user\Documents\project\source\services\users\node_modules\mongodb\lib\utils.js:132
throw err;
^
TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined
at _iterableToArrayLimit (C:\Users\user\Documents\project\source\services\users\source\index.js:15:131)
at _slicedToArray (C:\Users\user\Documents\project\source\services\users\source\index.js:11:66)
at C:\Users\user\Documents\project\source\services\users\source/index.js:61:113
at result (C:\Users\user\Documents\project\source\services\users\node_modules\mongodb\lib\utils.js:410:17)
at session.endSession (C:\Users\user\Documents\project\source\services\users\node_modules\mongodb\lib\utils.js:398:11)
at ClientSession.endSession (C:\Users\user\Documents\project\source\services\users\node_modules\mongodb-core\lib\sessions.js:134:41)
at executeCallback (C:\Users\user\Documents\project\source\services\users\node_modules\mongodb\lib\utils.js:395:17)
at handleCallback (C:\Users\user\Documents\project\source\services\users\node_modules\mongodb\lib\utils.js:128:55)
at executeCommand (C:\Users\user\Documents\project\source\services\users\node_modules\mongodb\lib\operations\collection_ops.js:558:12)
at handleCallback (C:\Users\user\Documents\project\source\services\users\node_modules\mongodb\lib\utils.js:128:55)
我调查了这些函数,它们似乎还在回调函数中返回了第三个status
参数。我也尝试将回调函数与第三个参数一起使用,并收到相同的错误。
我还认为问题可能出在Babel和ES6。我尝试使用function( ) {
代替( ) => {
,但仍然收到相同的错误。
我也尝试过使用没有回调的函数,它们可以正常工作。但是,我想异步使用MongoDB。
// this one works
collection.insertOne(request.user, (error, document) => {
return callback(null, document);
});
// these two do not
collection.findOneAndUpdate({ _id: ObjectId(request.user._id) }, { $set: request.$set }, (error, document) => {
return callback(null, document);
});
collection.findOneAndDelete({ _id: ObjectId(request.user._id) }, (error, document) => {
return callback(null, document);
});
request
变量和callback
函数来自微服务库。但是,该错误专门表明MongoDB回调是任何问题的根源。
回调函数应返回错误(如果有的话)以及查询结果,如MongoDB文档中所述。
https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndUpdate/