我正在为 GraphQL API 模块化我的模式,并尝试在不使用任何 3rd 方库的情况下合并解析器。
Lodash.merge()
有没有一种简单的方法可以在没有或等效的情况下做到这一点?
Apollo 文档说要使用像 Lodash 这样的库来merge()
模块化解析器。(http://dev.apollodata.com/tools/graphql-tools/generate-schema.html#modularizing)
问题似乎是,解析器本质上包含作为属性的函数,所以当我通过访问它们时它们似乎被省略Object.assign()
了JSON.stringify()
。
如果我 console.log 他们,我看到:{"Query":{},"Mutation":{}}
以下是其中一个解析器的样子:
const productResolvers = {
Query: {
myProducts: (root, { userId }, context) => {
return [
{ id: 1, amount: 100, expiry: '12625383984343', created: '12625383984343' },
{ id: 2, amount: 200, expiry: '12561351347311', created: '12625383984343' },
{ id: 3, amount: 200, expiry: '11346347378333', created: '12625383984343' },
{ id: 4, amount: 350, expiry: '23456234523453', created: '12625383984343' },
];
},
},
Mutation: {
addProduct: (root, { userId }, context) => {
return { id: 350, amount: 100, expiry: '12625383984343', created: '12625383984343' };
},
}
};
让我们假设还有一个几乎相同的名为widgetResolvers
.
这是一个功能齐全的代码块:
export const schema = makeExecutableSchema({
typeDefs: [queries, mutations, productSchema, widgetSchema],
resolvers
});
这是我想要实现的目标:
export const schema = makeExecutableSchema({
typeDefs: [queries, mutations, productSchema, widgetSchema],
resolvers: Object.assign({}, productResolvers, widgetResolvers)
});
我还没有加载使用休息传播的能力(https://babeljs.io/docs/plugins/transform-object-rest-spread/)。我怀疑它不会因为同样的原因Object.assign()
不起作用。
哦,这就是我怀疑这种合并不起作用的原因:为什么 JSON.stringify 不显示作为函数的对象属性?