Я всегда использую методы для вставки, обновления и удаления. Вот как мой код выглядит сейчас:
Сторона клиента
Template.createClient.events({
'submit form': function(event, tmpl) {
e.preventDefault();
var client = {
name: event.target.name.value,
// .... more fields
}
var validatedData = Clients.validate(client);
if (validatedData.errors) {
// Display validation errors
return;
}
Meteor.call('createClient', validatedData.client, function(error) {
if (error)
// Display error
});
}
});
Клиентская и серверная часть:
Clients = new Mongo.Collection("clients");
Clients.validate = function(client) {
// ---- Clean data ----
client.name = _.str.trim(client.name);
// .... more fields clean
// ---- Validate data ---
var errors = [];
if (!client.name)
errors.push("The name is required.");
// .... more fields validation
// Return and object with errors and cleaned data
return { errors: _.isEmpty(errors) ? undefined : errors, client: client };
}
Meteor.methods({
'createClient': function (client) {
// --- Validate user permisions ---
// If server, validate data again
if (Meteor.isServer) {
var validatedData = Clients.validate(client);
if (validatedData.errors)
// There is no need to send a detailed error, because data was validated on client before
throw new Meteor.Error(500, "Invalid client.");
client = validatedData.client;
}
check(client, {
name: String,
// .... more fields
});
return Clients.insert(client);
}
});
Meteor.call выполняется на стороне клиента и сервера, но у Meteor нет способа остановить работу на стороне сервера, если проверка на стороне клиента не удалась (или, по крайней мере, я не знаю, как это сделать). С помощью этого шаблона я избегаю отправки данных на сервер с помощью Meteor.call, если проверка не удалась.
Я хочу начать использовать Collection2, но не могу понять, как получить такой же шаблон. Все примеры, которые я нашел, включают использование прямой вставки и обновления на стороне клиента и разрешения/запрета для управления безопасностью, но я хочу придерживаться Meteor.call.
Я нашел в документации, которую я могу проверить перед вставкой или обновлением, но я не знаю, как заставить это работать:
Books.simpleSchema().namedContext().validate({title: "Ulysses", author: "James Joyce"}, {modifier: false});
Я знаю пакет autoform, но пока не хочу его использовать.
Как я могу проверить с помощью Collection2 на стороне клиента перед отправкой данных на сервер с помощью Meteor.call? Является ли мой шаблон неверным или несовместимым с Collection2, и мне нужно сделать это другим способом?