将 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)
}
})
谢谢
我在您的代码中发现了几个错误。
- 您的
_id
未在您发布的代码中定义,如果是,我认为它不会那样命名。这将是附加到文档的密钥,例如 item._id
或者在您的情况下可能是 fileObj._id
.
- 当方法只有 2 个时,你用 4 个参数调用你的方法
对我来说明显的错误是你调用方法的行应该是
Meteor.call('uploadFile', fileObj._id,file.name);
用点代替逗号。
您可能还想在方法调用中添加回调。你可以这样写:
Meteor.call("meteorMethod", dataObject, function(error, result){
if(error){
console.log("error", error);
}
if(result){
}
});
我正在尝试创建一个可以上传 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)
}
})
谢谢
我在您的代码中发现了几个错误。
- 您的
_id
未在您发布的代码中定义,如果是,我认为它不会那样命名。这将是附加到文档的密钥,例如item._id
或者在您的情况下可能是fileObj._id
. - 当方法只有 2 个时,你用 4 个参数调用你的方法
对我来说明显的错误是你调用方法的行应该是
Meteor.call('uploadFile', fileObj._id,file.name);
用点代替逗号。
您可能还想在方法调用中添加回调。你可以这样写:
Meteor.call("meteorMethod", dataObject, function(error, result){
if(error){
console.log("error", error);
}
if(result){
}
});