错误:不知道如何处理这种类型的突变。突变不遵循命名约定
Posted
技术标签:
【中文标题】错误:不知道如何处理这种类型的突变。突变不遵循命名约定【英文标题】:Error: Do not know how to handle this type of mutation. Mutation does not follow naming convention 【发布时间】:2020-12-23 05:54:00 【问题描述】:使用GRANDstack Starter 模板项目,我将apollo-server 与neo4j 结合使用。我有一个 CreateParticipant
突变(在带有 @cypher 指令的 schema.graphql 中定义),我想将其重用于新的突变。
传递到增强模式的简化解析器如下所示:
const resolvers =
Mutation:
UploadCSV: async (parent, file , context, info) =>
// some data processing using file omitted
const payload = name: 'Just a name'
const result = resolvers.Mutation.CreateParticipant(
parent,
payload,
context,
info
)
return 'thanks ***'
,
,
突变在 schema.graphql 文件中定义如下:
CreateParticipant(name: String!, id: ID = null): Participant
@cypher(
statement: """
CREATE (par:Participant
name: $name,
id: coalesce($id, apoc.create.uuid())
)
RETURN par
"""
)
UploadCSV(file: Upload!): String
当我现在尝试通过前端上传文件时,apollo-server 在执行resolvers.Mutation.CreateParticipant(parent, payload, context, info)
时抛出错误。 Payload 是一个具有突变所期望的键/值对的对象。
抛出的错误是:
错误:不知道如何处理这种类型的突变。突变确实 不遵循命名约定。
我想知道传递未修改的 info
是否是这不起作用的原因。
【问题讨论】:
您是否尝试过缩小 UploadCSV csv 中抛出的哪些函数?这样你就可以排除graphql配置设置vs csv读取,vs创建参与者变异代码?还有你不等待函数 csvToParticipant 的原因吗?这将有助于清理此代码并使其更具可读性。 @EdwardRomero 好点。我简化了这个例子。该函数实际上做了它应该做的事情。我用一些硬编码数据对其进行了简化。 看起来 neo4j-graphql.js 库正在尝试处理 UploadCSV 解析器,而不是使用您的自定义解析器。尝试在 trypedefs 中添加@neo4j_ignore
指令,以确保它不会尝试运行自动生成的解析器 UploadCSV(file: Upload!): String @neo4j_ignore
@WilliamLyon 感谢您的建议。我也试过这个。同样的错误。
【参考方案1】:
不要试图在另一个内部调用突变。而是将创建参与者逻辑拉出并导入通用函数。这允许您在上传 csv 和创建参与者突变之间保持关注点的分离。
一些不错的资源:
Nested Graphql Resolvers
Reusing Resolvers Conversation
【讨论】:
CreateParticipant 突变本身是最小可行函数。它通过 cypher 指令在模式中实现。在这种情况下,在 UploadCSV 突变中重用所述突变是有意义的,因为我在这里所做的只是转换上传的数据,以便它可以用于之前的书面突变(仍在其他地方使用)。 @manonthemat gotcha,您能否提供创建参与者架构定义,以便我们了解全局 添加了 CreateParticipant 突变。我想知道我的info
对于 CreateParticipant 是否有误。
@manonthemat 所以似乎重用解析是不常见的spectrum.chat/apollo/apollo-server/… 并且人们倾向于通过我最初在回复中提到的方法。但是如果你还想做的话,这里可能有办法spectrum.chat/apollo/apollo-server/…以上是关于错误:不知道如何处理这种类型的突变。突变不遵循命名约定的主要内容,如果未能解决你的问题,请参考以下文章