Apollo-link-rest: 在没有任何请求正文的情况下运行突变时出错

创建于 2018-09-28  ·  5评论  ·  资料来源: apollographql/apollo-link-rest

似乎没有输入就不能发出 PATCH 或 POST 请求?

错误: Error: [GraphQL mutation using a REST call without a body]. No输入was detected. Pass bodyKey, or bodyBuilder to the @rest() directive to resolve this.

突变:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

阿波罗选项:

bodySerializers: {
  text: (data, headers) => {
    headers.set('Content-Type', 'text/plain');
    return { body: data, headers };
  }
}

最有用的评论

实际上对我来说input: null不起作用,但这有效:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug, input: {}) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

所有5条评论

认为你可以这样做:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug, input: null) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

实际上对我来说input: null不起作用,但这有效:

mutation extendTrial($orgSlug: String!) {
  extendTrialResult(orgSlug: $orgSlug, input: {}) @rest(
    type: "Org",
    path: "/orgs/{args.orgSlug}/extend_trial/",
    method: "PATCH",
    bodySerializer: "text"
  )
}

这在客观上不是很可怕吗? 现在有办法解决这个问题吗? 文档说:

发出 POST 或 PUT HTTP 请求时,通常需要提供请求正文。 按照惯例,GraphQL 建议您将输入类型命名为输入,因此默认情况下,我们将在此处为您的身体查找 JSON 对象。

这听起来是不是好像我们意识到您并不总是需要身体的事实?

作为那条文档的作者,是的,我知道。 对于我的用例来说,这并不是那么高的优先级。

@d9001如果您查看@Laruxo 的解决方法,您会发现您需要做的就是添加几个字母来绕过此约束。 如果您想为此功能贡献代码,我很乐意帮助审核。

是的,并不是我无法让它发挥作用。 它只是让我发疯,弄清楚问题是什么,解决方案有点像我的拉取请求中提到的那样,每个人都告诉我删除未使用的对象:|

我会看看删除这个要求需要什么。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

karensg picture karensg  ·  5评论

fbartho picture fbartho  ·  6评论

kevinrobayna picture kevinrobayna  ·  6评论

Paddy-Hamilton picture Paddy-Hamilton  ·  7评论

Simply007 picture Simply007  ·  5评论