Apollo Server,Graphql-必须提供查询字符串

时间:2019-01-07 18:56:38

标签: javascript graphql apollo serverless

我不确定在这里我在做什么错吗?现在,我一直处于停滞状态,无法在无服务器设置中使用我的apollo-server-lambda运行变异,当我尝试运行这样的查询时,我的查询工作正常:

{ "mutation": "{ signIn(username: \"SomeUser\", password: \"SomePassword\" ) { token } }" }

我只收到消息:“必须提供查询字符串。”状态400。

我已经按照如下方式设置了我的解析器:

const resolvers = {
  Query: {
    users: async (_, args, ctx) => User.load(args, ctx)
  },

  Mutation: {
    signIn: async (_, { username, password }, ctx) => Auth.signIn({ username, password }, ctx)
  }
};

有关其他信息,这里是我的typeDefs:

const typeDefs = gql`
  type User {
    id: ID!,
    firstname: String,
    lastname: String,
    username: String,
    createdAt: String,
    role: String
  }

  type AuthToken {
    token: String
  }

  type Query {
    hello: String,
    users(id: Int): [User]
  }

  type Mutation {
    signIn(username: String!, password: String!): AuthToken!
  }
`;

我正在使用邮递员来测试我的graphql端点,而我的内容类型是application / json

我不知道这里是否有人可以告诉我我做错了什么,我试图将其全部移至查询解析器,并且可以用“查询”代替“变异”,但是使用“查询”,我猜以后我什么时候才真正想使用Mutation对数据进行突变,无论如何我还是需要它吗?

有人可以告诉我我在哪里错了吗?

编辑

我安装了graphql-playground-middleware-lambda,并用https://github.com/prisma/graphql-playground#as-serverless-handler设置了无服务器设置,如果我使用Graphiql,它可以按预期工作,但是我仍然对是否有人知道我发送的json出了什么问题仍然很感兴趣。邮递员?

1 个答案:

答案 0 :(得分:2)

发送请求时,您的请求正文应为格式正确的JSON对象,并带有query属性(如果包含变量,则可以选择variables属性):

{
  "query": "<GraphQL Document>",
  "variables {},
}

无论操作本身是query还是mutation,都是这种情况。

上面的query属性的实际值必须是语法上正确的文档,如GraphQL specification所述。文档通常将由单个操作定义(querymutation)组成,该定义包括该操作的所有请求字段。该文档还将包含片段(如果有的话)。

操作定义如下:

OperationType [Name] [VariableDefinitions] [Directives] SelectionSet

因此您可以拥有一个像这样的文档:

mutation SomeMutation {
  signIn(username: "SomeUser", password: "SomePassword") {
    token
  }
}

在此,操作的类型mutation名称SomeMutation,最外面的花括号集之间的内容是选择集。如果有任何变量,它们的类型将在选择集之前的括号中声明。

操作名称是可选的,但将其包括在后端以进行调试很有用。从技术上讲,操作类型也可以省略,在这种情况下GraphQL只是假设该类型是查询。例如,这仍然是有效的文档:

{
  users {
    id
  }
}

等效于

query SomeName {
  users {
    id
  }
}

前者称为查询速记。显然,这不能用于突变,因此,突变必须始终明确声明其操作类型。一个完整的例子:

{
  "query": "mutation SomeName ($username: String!, $password: String!) { signIn(username: $username, password: $password) { token } }",
  "variables {
    "username": "SomeUser",
    "password": "SomePassword"
  },
}