Apollo + Angular 突变不适用于变量

Posted

技术标签:

【中文标题】Apollo + Angular 突变不适用于变量【英文标题】:Apollo + Angular mutation is not working with variables 【发布时间】:2021-02-17 11:43:37 【问题描述】:

我在使用变量创建突变时遇到了麻烦。我可以让它直接包含值,如下所示:

export const orderCancellation = gql`
mutation
  cancelOrder(input: id: 2649,  cancellationReasonId: 1  ) 
    order
      id,
      isCancelled
    
  
`;

但是当尝试使用变量时没有任何效果:

export const orderCancellation = gql`
mutation cancelOrder($id: ID!, $cancellationReasonId: ID!) 
  cancelOrder(input: id: $id,  cancellationReasonId: $cancellationReasonId ) 
    order 
      id,
      isCancelled
    
  
`;

来自我们服务器的自定义错误消息:

Didn't find any result for  'CancelOrderPayload' with the arguments ':input=>#<#<Class:0x00005608dca67e90>:0x00005608e10cd790 @context=#<Query::Context ...>, @ruby_style_hash=:id=>nil, :cancellation_reason_id=>nil, @arguments=#<GraphQL::Execution::Interpreter::Arguments @keyword_arguments=:id=>nil, :cancellation_reason_id=>nil>, @maybe_lazies=[]>.

这就是我所说的突变:

this.apollo.mutate(
  mutation: orderCancellation,
  variables: id: orderId, cancellationReasonId: reasonId
);

有人知道我做错了什么吗?可能是服务器端的问题?

编辑 1:这是带有变量实现的请求负载(取自 Chrome DevTools 上的网络选项卡):

operationName: "cancelOrder"
query: "mutation cancelOrder($id: ID!, $cancellationReasonId: ID!) ↵  cancelOrder(input: id: $id, cancellationReasonId: $cancellationReasonId) ↵    order ↵      id↵      isCancelled↵      __typename↵    ↵    __typename↵  ↵↵"
variables: id: "3045", cancellationReasonId: "1"

编辑 2: 已经尝试像这样声明突变:

export const orderCancellation = gql`
mutation cancelOrder($input: CancelOrderInput!) 
  cancelOrder(input: $input) 
    order 
      id,
      isCancelled
    
  
`;

this.apollo.mutate(
     mutation: orderCancellation,
     variables: input: id: orderId, cancellationReasonId: reasonId
  );

【问题讨论】:

错误/缺失的值传递到变量中...控制台在突变调用之前记录它们...检查网络请求正文是否正确传递值 感谢您的回复!我在上面添加了请求有效负载。够了吗? 整数与字符串? @xadm 对不起,我不明白 cancelOrder(input:....... id: 2649, cancellationReasonId: 1 ... variables: .... id: "3045", cancellationReasonId: "1" ... id 2649 vs id "3045" 【参考方案1】:

我们找出问题所在。我们的服务器已将突变的 ID 声明为 Integer!,而不是 ID!。这是字符串 id 处理查询但不处理突变的原因。感谢您的努力!

【讨论】:

以上是关于Apollo + Angular 突变不适用于变量的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular Apollo Graphql 中访问突变结果

graphQl突变查询不适用于变量

在执行 Apollo 突变之前映射变量

对象作为突变中的输入变量:GraphQL - Apollo - React

如何测试一个变量设置为随机的 Apollo 突变?

Apollo/graphQL:如何将乐观 UI 用于嵌套反应组件的突变?