[英]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 規范中所述 。 文檔通常由單個操作定義( query
或mutation
)組成,該定義包括該操作的所有請求字段。 該文檔還將包含片段(如果有的話)。
操作定義如下所示:
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.