将 CSV 上传到流星:_id 未定义

Uploading CSV to meteor: _id not defined

我正在尝试创建一个可以上传 CSV 并从中创建 JSON 对象的流星应用程序。我密切关注 this tutorial,但我的代码不起作用。控制台告诉我 _id 没有在我调用 Meteor 方法的某些客户端代码中定义。我需要帮助弄清楚为什么会发生这种情况,更广泛地说,为什么即使我按照教程进行操作,代码也无法正常工作。

非常感谢任何帮助,包括将 CSV 文件上传到 meteor 的其他解决方案。

我的代码中(据我所知)相关的部分:

home.html:

<template name="home">
  <div class="template-home">
    <div class="page-header">
      <h1>CSV Importer</h1>
    </div>
  
 <div class="container">
   <div class="row">
    <p>
     <button type="button" class="btn btn-default btn-file">
     Import CSV <input type="file" name="myFileInput" class="myFileInput" value="">
     </button>
    </p>
    .............
</template>

home.js:

Template.home.events({
 "change .myFileInput": function(evt, templ){
  FS.Utility.eachFile(event, function(file){
   var theFile = new FS.File(file);
   Uploads.insert(theFile, function(err,fileObj){
    if(!err){
     Meteor.call('uploadFile', fileObj,_id,file,name);
    }
   })
  })
 }
});

upload.js(定义方法的地方):

Meteor.methods({
 'uploadFile':function(fileid,filename){
  var fs = Meteor.npmRequire('fs');
  var file = Uploads.find({_id:fileid});
  Meteor.setTimeout(function(){
   var filepath = '/imports/uploads-' + '-' + filename;
   CSV().from.stream(
   fs.createReadStream(filepath),
   {'escape':'\'})
   .on('record', Meteor.bindEnvironment(function(row,index){
    Address.insert({
     'Factor':row[0],
     'Caracteristica':row[1],
     'Number':row[2],
     'Indicador':row[3],
     'Razon':row[4],
     'UA':row[5],
     'UC':row[6],
     'UM':row[7],
     'UCe':row[8],
     'UCo':row[9],
     'US':row[10],
     'Tot':row[11],
     'Color':row[12],
    })
   }, function(error){
    console.log(error);
   }))
   .on('error', function(err){
    console.log(err);
   })
   .on('end', function(count){
    
   })
  },1000)
 }
})

谢谢

我在您的代码中发现了几个错误。

  1. 您的 _id 未在您发布的代码中定义,如果是,我认为它不会那样命名。这将是附加到文档的密钥,例如 item._id 或者在您的情况下可能是 fileObj._id.
  2. 当方法只有 2 个时,你用 4 个参数调用你的方法

对我来说明显的错误是你调用方法的行应该是

Meteor.call('uploadFile', fileObj._id,file.name);

用点代替逗号。

您可能还想在方法调用中添加回调。你可以这样写:

    Meteor.call("meteorMethod", dataObject, function(error, result){ 
        if(error){ 
            console.log("error", error); 
        } 
        if(result){ 

        } 
    });