Использование Meteor Я пытаюсь захватить и сохранить некоторые данные (имя, адрес электронной почты и возраст) с помощью формы. Эти данные должны быть сохранены в новой коллекции Meteor «Подписчики». Мой код выглядит следующим образом:Сохраните данные формы в коллекции с использованием методов метеорита
шаблона События (клиент \ вид \ 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 успешного успеха, данные собираются правильно, но всякий раз, когда я пытаюсь запросить коллекцию, она выиграла Ничего не показывать.
Я попытался найти данные в коллекции, используя простой шаблон, который я создал, чтобы перечислить коллекцию подписчиков в таблице, также с помощью Meteor Toys и через console.log(Subscribers.find());
, но не повезло. Кажется, что формы проходят, но данные не сохраняются в коллекции.
Кроме того, autopublish и небезопасным удаляются.
Что я делаю неправильно? Я все еще довольно новичок во всем Метеор, так что это может быть что-то очевидное, я здесь отсутствует.
Дайте мне знать, если вам нужно больше узнать о коде. Наконец, любые предложения по улучшению кода (структурированию или такому) приветствуются.
Большое спасибо заранее!
Несколько быстрых заметок: 1. Не просто «разрешить» прямую вставку в коллекцию. Это не требуется для методов на сервере и позволяет любому пользователю вставлять произвольные данные в коллекцию. 2. Обычно вы не имеете доступа ко всей БД со стороны клиента. Это то, что для pub/sub.Если вы хотите знать, какие данные хранятся на сервере, запросите базу данных напрямую (используя «meteor shell», «meteor mongo» или любой инструмент gui/cli, который позволяет вам напрямую обращаться к БД). 3. Подтвердите ввод пользователя на сервере. – MasterAM
Вы абсолютно правы. Я просто использовал 'meteor mongo' для запроса данных, и все там. Так что это должно быть что-то неправильное в списке бит. Я посмотрю. Спасибо за совет. Кроме того, вы сказали, что просто не разрешаете прямое вложение в коллекцию. Какой был бы лучший подход в моем случае? Форма - это, в основном, рассылка бюллетеня, чтобы заявить, поэтому форма является открытой, каждый может представить свою информацию. Теперь в фоновом режиме я просто хочу перечислить «подписчиков». Что бы вы порекомендовали для этого сценария? Я бы очень признателен за пример. Также, если вы можете подробно остановиться на (2), пожалуйста. – Adrian
Для (2) ознакомьтесь с публикациями и подписками. Прочтите [The Meteor Guide] (https://guide.meteor.com/) для получения дополнительной информации. Поскольку вы используете метод, вы можете проверить ввод пользователя перед его вставкой в базу данных. Вероятно, вы не хотите позволять кому-либо хранить что-либо в своей коллекции (кто-то может использовать консоль своего браузера для вызова ваших методов с произвольными данными). – MasterAM