使用Meteor我尝试使用表单捕获并保存一些数据(姓名,电子邮件和年龄)。这些数据应该保存在一个新的Meteor集合" Subscribers"中。我的代码如下:
模板事件(client \ views \ subscribe_form \ subscribe_form.js)
Template.Subscribe.events({
'submit form#subscribe-form': function(event){
// Prevent default browser form submit
event.preventDefault();
// Get values from the form
var subName = $('form#subscribe-form [name=subscribe-name]').val();
var subEmail = $('form#subscribe-form [name=subscribe-email]').val();
var subAge = $('form#subscribe-form [name=subscribe-age]').val();
let subscriberData = {
name: subName,
email: subEmail,
age: subAge,
createdAt: new Date()
};
// Insert subscriber into the collection
Meteor.call('SubscribeNow', subscriberData, function(error, result){
if(error){
// Output error if subscription fails
console.log(error.reason);
} else {
// Success
console.log("Subscription successful");
console.log(subscriberData);
console.log( Subscribers.find() );
}
});
},
});
服务器端(server \ collections \ subscribers.js)
var Subscribers = new Meteor.Collection('subscribers');
Subscribers.allow({
insert: function(){
return true;
}
});
Meteor.methods({
'SubscribeNow': function (subscriberData) {
//check(subscriberData, String);
try {
// Any security checks, such as logged-in user, validating data, etc.
Subscribers.insert(subscriberData);
} catch (error) {
// error handling, just throw an error from here and handle it on client
if (badThing) {
throw new Meteor.Error('bad-thing', 'A bad thing happened.');
}
}
}
});
现在,当我向表单添加一些数据并单击提交按钮时,它会通过成功的console.log消息,正确地获取数据,但每当我尝试查询集合时,它都不会显示任何内容一点都不。
我尝试使用我创建的简单模板在集合中查找数据,以便在表格中列出订阅者集合,也可以使用Meteor Toys和console.log( Subscribers.find() );
,但没有运气。似乎表单已经过,但数据没有保存在集合中。
此外, autopublish 和不安全也会被删除。
我做错了什么?我对Meteor的所有内容都很陌生,所以我可能会在这里找到一些显而易见的东西。
如果您需要查看更多代码,请告诉我们。最后,欢迎任何关于代码改进(结构化等)的建议。
非常感谢提前!
答案 0 :(得分:1)
因此,根据您在问题中添加的问题和评论,Subscribers
收集数据已正确保存(您已使用meteor mongo
验证了这一点),但无法检索使用Subscribers.find()
的数据。由于您已删除autopublish
包,因此您必须确保订阅了一份负责将Subscribers
数据从服务器推送到客户端的出版物。例如:
<强> /server/publications.js 强>
Meteor.publish('allSubscribers', function () {
return Subscribers.find();
});
<强> /client/some_template.js 强>
Template.someTemplate.onCreated(function () {
this.subscribe('allSubscribers');
});
...
订阅数据后,您可以运行Subscribers.find()
客户端,并返回数据。
有关详细信息,请参阅“流星指南”的Publications and Data Loading部分。