簡體   English   中英

Apollo Server,Graphql-必須提供查詢字符串

[英]Apollo Server, Graphql - Must provide query string

我不確定在這里我做錯了什么? 現在,我一直處於停滯狀態,無法在無服務器設置中使用我的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

我不知道這里是否有人可以告訴我即時消息做錯了什么,我嘗試將其全部移動到查詢解析器,並且可以用“查詢”替換“變異”,但是在這里使用“查詢”對我很有用而且我猜以后,當我真正想使用“變異”來變異數據時,無論如何我還是需要它嗎?

誰能告訴我這里錯了嗎?

編輯

我安裝了: graphql-playground-middleware-lambda並使用以下命令設置了無服務器設置: https : //github.com/prisma/graphql-playground#as-serverless-handler ,如果我使用Graphiql可以按預期工作,但是我仍然是否有興趣知道我通過郵遞員發送的json有什么問題嗎?

發送請求時,您的請求主體應為格式正確的JSON對象,並帶有query屬性(如果包含變量,則可以是variables屬性):

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

無論操作本身是query還是mutation都是這種情況。

上面的query屬性的實際值必須是語法正確的文檔 ,如GraphQL 規范中所述 文檔通常由單個操作定義( 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"
  },
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM