在 Apollo Mutation 中调用 Meteor 方法
Posted
技术标签:
【中文标题】在 Apollo Mutation 中调用 Meteor 方法【英文标题】:Call Meteor method inside Apollo Mutation 【发布时间】:2019-02-25 22:29:20 【问题描述】:我在服务器上定义了一些Meteor methods
,我只需要在服务器上执行(Meteor.isServer
)。现在我想使用Meteor.call
在Apollo 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?