2016-11-28 2 views
0

In einer Meteor Web App, ist sowohl ein SimpleSchema als auch eine ValidatedMethod redundant? Beim Versuch, das zuvor definierte Schema wiederzuverwenden, erhalte ich einen Syntaxfehler. HierVermeidung von Redundanz bei Verwendung von SimpleSchema und ValidatedMethod für eine Meteor-Sammlung?

ist, was ich meine: mycollection.js

export const myCollection = new Mongo.Collection('myCollection'); 

export const mySchema = new SimpleSchema({ 
    a_field:String; 
}); 

myCollection.attachSchema(mySchema); 

Jetzt für die Insert-Methode: 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); 
    } 
}); 

Für dieses einfache Beispiel wäre es "ok" sein a_field:String auf die neu zu schreiben Schema der validierten Methode. Für kompliziertere Beispiele scheint dies jedoch ziemlich redundant zu sein, und was ist, wenn ich ein Teil des zuvor definierten Schemas verwenden und einige neue Felder zur Validierung hinzufügen möchte, ohne das Ganze kopieren zu müssen?

+0

einfaches Schema, wenn eine Sammlung gebunden kümmert sich um Validierungen auf dem Client sowohl als auch vom Server. Da clientseitige Validierungen in der Regel nicht vertrauenswürdig sind, finden die Validierungen wieder auf der Serverseite statt (was als vertrauenswürdig angesehen wird). Sie können stattdessen [einfache Schema-Validatoren] (https://github.com/aldeed/meteor-simple-schema#validation-options) betrachten. – blueren

Antwort

1

hatte ich das gleiche Problem wie vorher, das ist, was ich getan habe:

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) { 
    // ... 
    } 
}); 

Wenn Sie einige Felder ausschließen müssen:

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) { 
    // ... 
    } 
}); 

Und wenn Sie das Schema erweitern müssen:

0

Der Vollständigkeit halber ist dies, was ich verwendet habe, obwohl es ganz natürlich aus dem oben genannten folgt Antwort (Unterschied ist, dass ich das Schema selbst verwenden, anstatt sie aus der Sammlung Abrufen):

import {mySchema, myCollection} from mycollection.js; 

export const insertMethod = new ValidatedMethod({ 
    name:'insertMethod', 
    validate:new SimpleSchema([ 
     mySchema,   
    ]).validator(), 
    run(args){ 
     myCollection.insert(args); 
    } 
}); 
Verwandte Themen