使用请求承诺将数据发布到graphql服务器

使用请求承诺将数据发布到graphql服务器,graphql,request-promise,Graphql,Request Promise,我正在使用该库向graphql服务器发出http请求。要实现查询,我将执行以下操作: const query = ` { user(id:"123173361311") { _id name email } } ` const options = { uri: "http://localhost:5000/graphql", qs: { query }, json: true } return await reque

我正在使用该库向graphql服务器发出http请求。要实现查询,我将执行以下操作:

const query = `
    {
    user(id:"123173361311") {
      _id
      name
      email
    }
  }
`

const options = {
  uri: "http://localhost:5000/graphql",
  qs: { query },
  json: true
}

return await request(options)
上面的代码运行良好。但是,我对如何进行突变感到困惑,因为我需要指定实际的突变和输入数据,如下所示:

// Input
{
   name: "lomse"
   email: "lomse@lomse.com"
}

const mutation = `
   mutation addUser($input: AddUserInput!){
      addUser(input: $input) {
          _id
          name
          email
      }
   }
`

const option = {
    uri: "http://localhost:5000/graphql",
    formData: {mutation},
    json: true,
    // how to pass the actual data input
}

request.post(option)
或者是库不是为这个用例而设计的

该库似乎完成了我需要请求-承诺库完成的任务

import { request } from 'graphql-request'

const variables = {
   name: "lomse",
   email: "lomse@lomse.com"
}

const mutation = `
   mutation addUser($input: AddUserInput!){
      addUser(input: $input) {
          _id
          name
          email
      }
   }
`

response = await request(uri, mutation, {input: variables})
图书馆似乎做了我所需要的,请求-承诺图书馆要做的

import { request } from 'graphql-request'

const variables = {
   name: "lomse",
   email: "lomse@lomse.com"
}

const mutation = `
   mutation addUser($input: AddUserInput!){
      addUser(input: $input) {
          _id
          name
          email
      }
   }
`

response = await request(uri, mutation, {input: variables})

使用
body
,而不是
formData
。你的身体应该由三个属性组成:

  • query
    :正在发送的GraphQL文档。即使操作是一个变异,该属性仍然命名为query
  • 变量
    :序列化为JSON对象的变量值的映射。仅当您的操作使用变量时才需要
  • operationName
    :指定要执行的操作。仅当文档包含多个操作时才需要

使用
body
,而不是
formData
。你的身体应该由三个属性组成:

  • query
    :正在发送的GraphQL文档。即使操作是一个变异,该属性仍然命名为query
  • 变量
    :序列化为JSON对象的变量值的映射。仅当您的操作使用变量时才需要
  • operationName
    :指定要执行的操作。仅当文档包含多个操作时才需要

查询也可以包含变量。。。查看浏览器网络请求以了解一些graphiql Playground中的详细信息有趣的是,网络选项卡没有记录任何变异请求Socket通信可用于搜索
变异后的
,例如,研究显示如何从前端执行变异,这不是我试图完成的。在我的例子中,我有两个需要相互通信的服务器查询也可以包含变量。。。查看浏览器网络请求以了解一些graphiql Playground中的详细信息有趣的是,网络选项卡没有记录任何变异请求Socket通信可用于搜索
变异后的
,例如,研究显示如何从前端执行变异,这不是我试图完成的。在我的例子中,我有两台服务器需要相互通信!正是我想要的。他们的文档中是否提到了这一点?您从何处获得此信息?由于GraphQL与传输无关,因此它本身没有指定应如何处理HTTP请求。以上大部分只是惯例。官方网站,我一定错过了。再次谢谢你!正是我想要的。他们的文档中是否提到了这一点?您从何处获得此信息?由于GraphQL与传输无关,因此它本身没有指定应如何处理HTTP请求。以上大部分只是惯例。官方网站,我一定错过了。再次感谢