“ID”类型的变量“$userId”用于期望类型“ID!”的位置

A M*_*eto 2 typescript template-strings graphql

我正在尝试使用 npm 包发出 graphql 请求graphql-request。我正在发现模板文字的使用。

   async getCandidate(userId: number) {
            const query = gql`
            query($userId: ID){
              candidate(id: $userId){
                id _id source phone
              }
            }
            `
            const variables = {userId: "/api/candidates/" + userId}
            return await request(GRAPHQL_URL, query, variables)
        }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用该usedId变量,但出现错误:

Variable "$userId" of type "ID" used in position expecting type "ID!".: {"response":{"errors":[{"message":"Variable \"$userId\" of type \"ID\" used in position expecting type \"ID!\".","extensions":{"category":"graphql"},"locations":[{"line":2,"column":9},{"line":3,"column":19}]}],"status":200},"request":{"query":"\n\t\tquery($userId: ID){\n\t\t  candidate(id: $userId){\n\t\t    id _id source phone\n\t\t  }\n\t\t}\n\t\t","variables":{"userId":"/api/candidates/1"}
Run Code Online (Sandbox Code Playgroud)

小智 7

你只需要修改query($userId: ID){这个 query($userId: ID!){

这是因为架构定义了userId需要不可为空的值。