使用流星我試圖使用表單捕獲並保存一些數據(姓名,電子郵件和年齡)。這些數據應該保存在一個新的流星收藏「訂戶」中。我的代碼如下:使用流星方法將表單數據保存到集合
模板活動(客戶端\意見\ 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