在 Apollo Mutation 中调用 Meteor 方法

Posted

技术标签:

【中文标题】在 Apollo Mutation 中调用 Meteor 方法【英文标题】:Call Meteor method inside Apollo Mutation 【发布时间】: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 是它们从中导入的文件。 【参考方案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, ...); 
  

【讨论】:

以上是关于在 Apollo Mutation 中调用 Meteor 方法的主要内容,如果未能解决你的问题,请参考以下文章

Vue-Apollo GraphQL Mutation 未正确调用

React-Apollo-Hooks 使用Mutation 传递空变量?

在 Apollo React Mutation 组件中自定义变量

Apollo 的 TypeScript 类型使用Mutation 的 refetchQueries?

React Apollo GraphQL Mutation 返回 400(错误请求)

Apollo GraphQL Mutation 为列表中的每个项目单独加载