I'm trying to create a meteor app that can upload a CSV and create JSON objects from it. I closely followed this tutorial, but my code doesn't work. The console tells me that _id is not defined in some client code where I am calling a Meteor method. I need help figuring out why this is happening and, more broadly, why the code won't work properly even though I followed the tutorial.
Any help on this is greatly appreciated, including other solutions for uplaoding CSV files to meteor.
The parts of my code that (as far as I can tell) are relevant:
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 (where the method is defined):
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)
}
})
Thanks
I see several errors in your code.
_id
is not defined in the code you posted, and if it was, I assume it wouldn't be named like that. It would be a key attached to a document, likeitem._id
or maybe in your casefileObj._id
.The obvious mistake to me is that the line where you call your method should be
with dots instead of comma.
You also might want to add a callback to your method call. You can write it like this: