使用流星我试图使用表单捕获并保存一些数据(姓名,电子邮件和年龄)。这些数据应该保存在一个新的流星收藏“订户”中。我的代码如下:使用流星方法将表单数据保存到集合
模板活动(客户端\意见\ 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());
}
});
},
});
服务器端(服务器\收藏\ 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消息正确拾取数据,但每当我尝试查询它获得的集合时一点都不显示。
我试图寻找集合中的数据,使用我创建的一个简单模板来列出Subscribers集合在表中,也与流星玩具和console.log(Subscribers.find());
但没有运气。似乎表格经历了,但数据并未保存在收藏中。
此外,自动发布和不安全被除去。
我在做什么错?我对Meteor的一切还是很陌生的,所以这可能是我在这里失踪的事情。
让我知道你是否需要看到更多的代码。最后,欢迎任何关于代码改进(结构化或其他)的建议。
非常感谢提前!
一些快速注释:1.不要简单地“允许”直接插入集合。对于服务器上的方法不是必需的,并且允许任何用户将任意数据插入到集合中。 2.您通常不能访问客户端的所有数据库。这是pub/sub的用途。如果你想知道服务器上存储了什么数据,直接查询数据库(使用'meteor shell','meteor mongo'或任何允许你直接访问数据库的gui/cli工具)。 3.验证服务器上的用户输入。 – MasterAM
你是对的。我只是使用'meteor mongo'来查询数据,一切都在那里。所以它在列表位上肯定是错的。我会研究它。谢谢你的提示。此外,你说不要直接插入收藏。对我而言,最好的方法是什么?该表格基本上是一个简讯,所以表格是公开的,每个人都可以提交他们的信息。现在在后端,我只是想列出'订阅者'。你会为这种情况推荐什么?我真的很感激一个例子。另外,如果你能详细说明(2)请。 – Adrian
(2)查看出版物和订阅。阅读[流星指南](https://guide.meteor.com/)了解更多信息。由于您使用的是方法,因此可以在将用户输入插入数据库之前对其进行验证。您可能不希望只允许任何人在您的收藏中存储任何内容(某人可以使用其浏览器的控制台以任意数据调用您的方法)。 – MasterAM