Meteor mdg:validated-method,不使用简单模式

时间:2016-08-30 20:12:48

标签: javascript validation meteor simple-schema

那么,

Simple Schema is in the middle of transitioning to a new version 2.0

与此同时,我不确定我是否愿意在我的项目中使用它。

我正在编写一个基于ES6 React的Meteor应用程序,我想使用The "Advanced" way to create meteor methods。但是,我不想使用aldeed:simple-schema。

有没有办法在这里放入自定义验证方法?

这不起作用:

export const addSuggestion = new ValidatedMethod({
  name: 'suggestion.add',
  validate() {
    return true
  },
  run(incommingSuggestion) {
    // do things which are not relevant to this question.
  }
})

它会产生以下错误:

Error: Returning from validate doesn't do anything; perhaps you meant to throw an error?(…)

有没有不同的方式来写这个?

  

也许我不需要使用 验证方法 ,而应该写出来long-form 编辑: 编辑:如果你想要的话,你可以用所有这些额外的锅炉板写出所有长形式的东西暂时避免一起验证。现在这是我将使用的解决方案,直到我最终决定如何验证所有内容。我不知道现在该做什么,因为Simple Schema正在转换。 - 实际上这不起作用,它出于某种原因永远不会返回一个值,我无法解决这个问题。

那里的任何人都知道怎么解决这个问题?

显然谷歌搜索没有发现任何结果,我现在已经看了这个问题超过三天了。

2 个答案:

答案 0 :(得分:1)

你可以重新实现SimpleSchema的API,但为什么呢?

SimpleSchema是Meteor中的事实标准,如Mongoose for Node< - > MongoDB。在工作中有其他选择,但我认为你正在推动前沿。

如果您有工作要做,请使用SimpleSchema。

答案 1 :(得分:0)

来自Meteor Forums

首先,Meteor method应该期望像这样的对象:

myMethod.call({
  arg1: 'hello',
  arg2: 25,
}, (error, result) => { /* do stuff */ });

然后您的方法将被定义为: (注意, validate() { } 为空,在我返回之前< / em> true - 这就是我遇到的问题)

import { ValidatedMethod } from 'meteor/mdg:validated-method';
import { check } from 'meteor/check';

export const myMethod = new ValidatedMethod({
  name: 'myMethod',
  validate() { }, // always valid
  run({ arg1, arg2 }) {
    // do things
  }
};

当您准备好验证参数时,只需相应地更改验证:

validate(opts) {
  check(opts, {
    arg1: String,
    arg2: Number,
  }
},

这样我们可以避免使用Simple-Schema,而它可以解决从1.0到2.0的转换(祝你好运Simple Schema !!!)

感谢ffxsam在流星论坛上提供the solution