GraphQL如何变异数据

时间:2016-09-09 13:04:11

标签: graphql

我有一个基本架构,用于改变一些看起来像

的数据
const schema = new graphql.GraphQLSchema({
    mutation: new graphql.GraphQLObjectType({
        name: 'Remove',
        fields: {
            removeUser: {
                type: userType,
                args: {
                    id: { type: graphql.GraphQLString }
                },
                resolve(_, args) {
                    const removedData = data[args.id];
                    delete data[args.id];
                    return removedData;
                },
            },
        },
    })
});

环顾谷歌我无法找到需要发送到mutate的示例查询的明确示例。

我试过了

POST - localhost:3000 / graphql?query = {removeUser(id:" 1"){id,name}}

此操作失败并显示错误:

{
  "errors": [
    {
      "message": "Cannot query field \"removeUser\" on type \"Query\".",
      "locations": [
        {
          "line": 1,
          "column": 2
        }
      ]
    }
  ]
}

2 个答案:

答案 0 :(得分:0)

为了发布来自前端应用程序的请求,建议使用apollo-client包。假设我想验证用户登录信息:

import gql from 'graphql-tag';
import ApolloClient, {createNetworkInterface} from 'apollo-client';

client = new ApolloClient({
    networkInterface: createNetworkInterface('http://localhost:3000/graphql')
});

remove(){
    client.mutate({
            mutation: gql`
                mutation remove(
                  $id: String!
                ) {
                  removeUser(
                    id: $id
                  ){
                    id,
                    name
                  }
                }
              `,
            variables: {
                id: "1"
            }
        }).then((graphQLResult)=> {
            const { errors, data } = graphQLResult;

            if(!errors && data){
                console.log('removed successfully ' + data.id + ' ' + data.name);
            }else{
                console.log('failed to remove');
            }
    })
}

More information about apollo-client can be found here

您是否尝试使用graphiql查询和改变架构?

如果您想手动创建POST请求,可能需要尝试以正确的形式构建它:

?query=mutation{removeUser(id:"1"){id, name}}

(Haven没有尝试过自己发帖,如果你成功了,请告诉我,我在使用graphiql时将其从网址中构建出来)

答案 1 :(得分:0)

您必须明确标记您的突变,即

mutation {
  removeUser(id: "1"){
    id,
    name
  }
}

在GraphQL中,如果省略mutation关键字,它只是发送查询的简写,即执行引擎会将其解释为

query {
  removeUser(id: "1"){
    id,
    name
  }
}

比照Section 2.3 of the GraphQL Specification