Как избежать избыточности при использовании как SimpleSchema, так и ValidatedMethod для сбора метеоров?
Имеется ли в метеорологическом веб-приложении и SimpleSchema, и ValidatedMethod? При попытке использовать ранее определенную схему я получаю синтаксическую ошибку.
Вот что я имею в виду: mycollection.js
export const myCollection = new Mongo.Collection('myCollection');
export const mySchema = new SimpleSchema({
a_field:String;
});
myCollection.attachSchema(mySchema);
Теперь для метода вставки:methods.js
import {mySchema, myCollection} from mycollection.js;
export const insertMethod = new ValidatedMethod({
name:'insertMethod',
validate:new SimpleSchema({
mySchema, /*Shows a syntax error: How to avoid repeating the schema?*/
}).validator(),
run(args){
myCollection.insert(args);
}
});
Для этого простого примера было бы "хорошо" переписать a_field:String
к проверенной схеме метода. Однако для более сложных примеров это кажется излишним, и что, если я захочу использовать некоторые из ранее определенных схем и добавить новые поля для проверки, не копируя их целиком?
2 ответа
У меня была такая же проблема, как и раньше, вот что я сделал:
import { ValidatedMethod } from 'meteor/mdg:validated-method';
import { Reviews } from '../../Reviews/Reviews.js';
export const insertReview = new ValidatedMethod({
name: 'insertReview',
validate: Reviews.simpleSchema().validator(),
run(data) {
// ...
}
});
Если вам нужно исключить некоторые поля:
import { ValidatedMethod } from 'meteor/mdg:validated-method';
import { Reviews } from '../../Reviews/Reviews.js';
const newReviewsSchema = Reviews.simpleSchema().omit([
'field1',
'field2',
]);
export const insertReview = new ValidatedMethod({
name: 'insertReview',
validate: newReviewsSchema.validator(),
run(data) {
// ...
}
});
И когда вам нужно расширить схему:
import { ValidatedMethod } from 'meteor/mdg:validated-method';
import { Reviews } from '../../Reviews/Reviews.js';
export const insertReview = new ValidatedMethod({
name: 'insertReview',
validate: new SimpleSchema([
Reviews.simpleSchema(),
new SimpleSchema({
newField: {
type: String,
}
}),
]).validator(),
run(data) {
// ...
}
});
Для полноты, это то, что я в конечном итоге использовал, хотя это вполне естественно следует из вышеприведенного ответа (разница в том, что я использую саму схему, а не извлекаю ее из коллекции):
import {mySchema, myCollection} from mycollection.js;
export const insertMethod = new ValidatedMethod({
name:'insertMethod',
validate:new SimpleSchema([
mySchema,
]).validator(),
run(args){
myCollection.insert(args);
}
});