0

メテオ Web アプリでは、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、検証済みのメソッドのスキーマに書き換えても問題ありません。より複雑な例では、これはかなり冗長に思えます。以前に定義されたスキーマの一部を使用し、すべてをコピーすることなく、検証用にいくつかの新しいフィールドを追加したい場合はどうでしょうか?

4

2 に答える 2

1

私は以前にあなたと同じ問題を抱えていました。これが私がしたことです:

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) {
    // ...
  }
});
于 2016-11-28T06:41:46.690 に答える
0

完全を期すために、これは私が最終的に使用したものですが、上記の回答から非常に自然に従います(違いは、コレクションから取得するのではなく、スキーマ自体を使用することです):

import {mySchema, myCollection} from mycollection.js;

export const insertMethod = new ValidatedMethod({
    name:'insertMethod',
    validate:new SimpleSchema([ 
        mySchema,          
    ]).validator(),
    run(args){
        myCollection.insert(args);
    }
});
于 2016-12-01T08:12:49.323 に答える