Node.js nodejs中循环的mongodb内部回调
我试图用Excel中的数据填充mongoDB集合。我认为我理解回调的异步性质,因此在数据库回调之前使用另一个函数对作用域进行了本地化。然而,我无法克服我的错误 这是代码Node.js nodejs中循环的mongodb内部回调,node.js,mongodb,callback,Node.js,Mongodb,Callback,我试图用Excel中的数据填充mongoDB集合。我认为我理解回调的异步性质,因此在数据库回调之前使用另一个函数对作用域进行了本地化。然而,我无法克服我的错误 这是代码 var http = require('http'); var parseXlsx = require('excel'); var mongo = require('mongoskin'); var faker = require('faker'); var moment = require('moment'); var Obj
var http = require('http');
var parseXlsx = require('excel');
var mongo = require('mongoskin');
var faker = require('faker');
var moment = require('moment');
var ObjectID = require('mongodb').ObjectID;
var uristring =
process.env.MONGOLAB_URI ||
process.env.MONGOHQ_URL ||
'mongodb://localhost:27017/loadmongo/data';
var db = mongo.db(uristring, {native_parser:true});
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
console.log('connected');
});
http.createServer(function handler(req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
parseXlsx('userRegistration.xlsx', function(err, data) {
if(err) throw err;
console.log(data.length);
console.log(data[0][0]);
for(var i = 0; i<= data.length; i++) {
//(function(i){
console.log('inside for loop');
var t = Math.floor(Math.random()*10);
var aCD = moment().subtract('days', t).format('MM DD YYYY');
var tmpID = new ObjectID();
console.log(data[i][0]);
var tmp = {
'_id': tmpID,
'firstName': data[i][0],
'lastName': data[i][1],
'email1': data[i][2],
'email2': data[i][3],
'accountCreationDate': aCD,
'location': {
'country' : data[i][9],
'city' : data[i][6],
'state' : data[i][7],
'stateCode' : data[i][7],
'zipcode' : data[i][10],
'streetName' : data[i][5],
'streetNumber' : data[i][4],
'countryCode' : data[i][8],
'longlat': {
'type' : "Point",
'coordinates': [data[i][12], data[i][11]]
}
},
'serviceNeededCurrent': {
},
'serviceOfferedCurrent': {
},
'serviceCompleted': {
},
'reviewsGiven': {
},
'reviewesRecieved': {
},
'financialRecords': {
}
};
(function(tmp){
db.collection('userRegistration').insert(tmp, function(err, result){
if (err) {
console.log(err);
console.log('some error')
}
if (result)
console.log('userRegistration Collection.. Done');
});
}(tmp));
} //end of for loop
}); // End of parsexlsx
哦,很抱歉,我没有意识到这些是您的2
控制台的输出。log
!好的,您只需在data.length
之前停止循环即可
for (var i = 0; i < data.length; i++) {
for(变量i=0;i
数组索引范围从
0
到-1
;)这似乎只是parseXlsx方法的一个问题,不是吗?我想与Mongo无关……您的第43行是console.log(数据[0][0]);
,不是吗?您确定您的文件路径吗?您认为呢?但是,看看输出675是console.log的输出(data.length);而Ernesto是console.log的输出(数据[0][0]);另外,当我删除整个for循环和数据库调用时,我没有看到错误。我还注意到,尽管看到了错误,数据库还是被正确填充。仍然无法找出错误的原因。谢谢,它起了作用。但是,我试着想,为什么我的代码在出现错误之前没有打印for循环的内容?
for (var i = 0; i < data.length; i++) {