【问题标题】:Call Meteor method inside Apollo Mutation在 Apollo Mutation 中调用 Meteor 方法
【发布时间】:2019-02-25 22:29:20
【问题描述】:

我在服务器上定义了一些Meteor methods,我只需要在服务器上执行(Meteor.isServer)。现在我想使用Meteor.callApollo resolvers 上调用这些方法,但这似乎不起作用。

Meteor.methods({ 
  'post.add': function addpost(data) {
    new SimpleSchema({
      data: { 
        type: Object
      },
      'data.title': { type: String },
      'data.body': { type: String },
      'data.tag': { type: String },
    }).validate(data);
    return Post.insert(data);
  }
});

const resolvers = {
  Mutation: {
    doSomething(){ 
      return Meteor.call('post.add', data);
    }
  }
}

但是在客户端调用该方法(在删除 Meteor.isServer 之后)工作正常。 另一个问题是在另一个 Mutation 函数中使用解析器 Mutation 函数:

const resolvers = {
  Mutation: {
    addData(){ ... }

    doSomething(){ return this.addData(); }
  }
}

【问题讨论】:

  • 你不能return Meteor.call(...)。将Post.insert(data) 放入突变或定义一个函数并调用该函数而不是 Meteor.method。 (顺便说一句,您可以将模式附加到您的集合中,这样您就不必每次都validate
  • @dabe 这只是一个例子。该方法的作用远不止 Post.insert。我还在服务器上定义了一组函数作为类,并导入它们以在 Mutation 中使用,但即使这样也不起作用。
  • 确实成功了。我忘记将我的函数定义为 static 是它们从中导入的文件。

标签: reactjs meteor apollo react-apollo


【解决方案1】:

我最终编写了一个 JS class,我在其中定义了一些 static functions/methods(为了能够在没有实例化的情况下调用方法,它是 class)并在我的 resolvers 中使用它们。

// some file .../Utils
class Utils{
  static someMethod({arg1, arg2, ...}){
    ...do something
  }
}
export default Utils;

// In my resolvers
import Utils from '.../Utils'
const resolvers = {
  Mutation: {
    const a = ...;
    const b = ...;
    const c = Utils.someMethod({a, b, ...}); 
  }
}

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 2017-03-08
    • 2018-11-09
    • 2018-05-27
    • 2019-06-12
    • 2018-05-12
    • 2016-06-26
    • 2018-07-09
    • 2019-01-26
    相关资源
    最近更新 更多