这是我使用Papa Parse(CSV解析器库)的代码
Papa.parse(theFile.target.result, {
header: true,
step: function(row) {
Meteor.call('file-upload', row.data);
}
row.data是一个对象:
[
{
"Column 1": "foo",
"Column 2": "bar"
},
{
"Column 1": "abc",
"Column 2": "def"
}
]
我很难使用Meteor方法找到对象值,所以我可以将它添加到我的集合中,以下是rowData.Desc rowData.Title
未定义...回复row.data
到浏览器控制台显示一切正常。任何想法都错了吗?
Meteor.methods({
'file-upload': function(rowData) {
Products.insert({
Title: rowData.Title,
Desc: rowData.Desc
})
}
});
答案 0 :(得分:1)
你从哪里得到“rowData.Title”? rowData似乎是一个数组,而不是一个对象。并且属性标题甚至不存在于嵌套对象中。
但我想我知道你要做什么。
看起来您只需要通过迭代数组来存储数据,或者在模板中以不同方式呈现数据。
如果数组中的每个对象文字都是产品,那么您可能要做的就是迭代该数组并以这种方式插入数据:
Meteor.methods({
'file-upload': function(rowData) {
_.each( rowData, function(data) {
Products.insert({
Title: rowData["Column 1"],
Desc: rowData["Column 2"]
})
});
}
});
你可以采取一些额外的措施来解决问题:
首先,确保您的方法通过将其登录到终端来接收服务器上所需的数据:
Meteor.methods({
'file-upload': function(rowData) {
console.log('rowData: ', rowData);
....
确保在终端显示。
如果您的数据存在,并且您没有在终端中看到错误,则在终端中打开一个新选项卡并运行meteor的mongo命令以打开mongo shell。
$ meteor mongo
接下来,列出所有集合并找到该集合 - 最有可能的产品
> show collections
列出该集合的文档以确保存储数据:
> db.products.find().pretty()