在查询/创建mongoose时使用fast-csv

时间:2018-01-30 18:29:34

标签: javascript node.js mongodb csv mongoose

下面的代码有两件事:

1)首先暂停解析器,如果用户不存在则查询用户集合,然后创建用户。

2)然后通过从上传的原始数据创建(保存)故事文档来完成,并恢复解析器。

当我运行代码时,除了一行之外的所有文档都会被解析和上传。 (文件大小并不重要,总是跳过一行)。

如果我自己运行checkLength函数,则会正确上传和保存文件而不会出现问题。

所以我的问题是:我在这里正确使用回调吗?我的最终目标是在findUsers完成后运行checkLength函数,然后继续解析。我猜测承诺也很有用,但我不想跳得太远。

 let parser = csv
   .fromString(myFile, {
     renameHeaders: true,
     headers: headerArray,
     ignoreEmpty: true
 })

.on("data", function(data) {

  let checkLength = function() {
    data.endUser = user;
    stories.push(data);
    if (Story.length > 100) {
      Test.Story.create(stories, function(err) {
        if (err) throw err;
      });
      storiesTotalLength += stories.length;
      stories= [];          
    }
    parser.resume();
  }      

  let findUsers = function(callback) {
    User.findOne({
        name: data.endUser
      }, function(err, results) {
      if (err) throw err;
      if (results) {
       callback();
      }else{
        user = {
          name: data.endUser,
          _id: new mongoose.Types.ObjectId()
        }
        User.create(user, function(err) {
          if (err) throw err;
          callback();
        });
      }
    });
  }

  parser.pause();
  findUsers(checkLength);

})
.on("end", function() {

  Story.create(stories, function(err) {
    if (err) throw err;        
  });

  res.render('pages/uploadpage', {
    message: (`${stories.length + storiesTotalLength} documents have been successfully uploaded. ${users.length} Total New Users`)
  });

});

0 个答案:

没有答案