简体   繁体   English

Apollo + Angular 突变不适用于变量

[英]Apollo + Angular mutation is not working with variables

I'm having troubles creating mutations with variables.我在用变量创建突变时遇到了麻烦。 I can make it work including the values directly, like this:我可以让它直接包含值,就像这样:

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

But when try to use variables nothing works:但是当尝试使用变量时,没有任何效果:

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

The custom error message from our server:来自我们服务器的自定义错误消息:

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=[]>}.

And this is how I call the mutation:这就是我所说的突变:

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

Does any one has clue on what i'm doing wrong?有没有人知道我做错了什么? Maybe it's a server side problem?也许这是服务器端的问题?

EDIT 1: Here is the request payload with variables implementation (took from Network tab on Chrome DevTools):编辑 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"}

EDIT 2: Already tried to declare the mutation like this:编辑 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}}
  });

We figure it out what was the problem.我们弄清楚是什么问题。 Our server has declared the IDs for mutations as Integer!, instead of ID!.我们的服务器已将突变的 ID 声明为 Integer!,而不是 ID!。 This is the cause of string ids was working with queries but not with mutations.这是字符串 id 处理查询但不处理突变的原因。 Thanks for your effort!谢谢你的努力!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM