带有args的graphql查询不适用于用户ID

问题描述

我被骗了。我最初创建了用户查询,它给了我错误,我认为是语法错误。但是后来我为车辆创建了一个完全相同的查询。我怀疑跟身份证有关!类型,但我的线索用完了。任何帮助将不胜感激!

这是我的 typedef 和解析器。

//TYPEDEFS//

   type User {
      id: ID!
      fname: String
      lname: String
      email: String
      password: String
      vehicles: [Vehicle]
    }

    type Vehicle {
      id: ID!
      vin: String
      model: String
      make: String
      drivers: [User]
    }

    type Query {
      users: [User]
      user(id: ID!): User
      vehicles: [Vehicle]
      vehicle(vin: String): Vehicle
    }

//解析器//

   user: async (parent,args,context) => {
        const { id } = args
        return context.prisma.user.findUnique({
          where: {
            id,},})
      },vehicle: async (parent,context) => {
        const { vin } = args
        return context.prisma.vehicle.findUnique({
          where: {
            vin,}
        })
      }
   

//查询//

**这个是坏掉的并且有错误:在prisma.findOneUser 上得到无效值'1'。提供的字符串,预期的 Int **我试过 id: "1"user(where: {id: 1})

query {
  user(id:1){
    id
    fname
  }
}

**这个按预期工作

query {
  vehicle(vin:"123123123"){
    vin
    make
  }
}

//完全错误*//

{
  "errors": [
    {
      "message": "\nInvalid `prisma.user.findUnique()` invocation:\n\n{\n  where: {\n    id: '1'\n        ~~~\n  }\n}\n\nArgument id: Got invalid value '1' on prisma.findOneUser. Provided String,expected Int.\n\n","locations": [
        {
          "line": 2,"column": 3
        }
      ],"path": [
        "user"
      ],"extensions": {
        "code": "INTERNAL_SERVER_ERROR","exception": {
          "clientVersion": "2.13.1","stacktrace": [
            "Error: ","Invalid `prisma.user.findUnique()` invocation:","","{","  where: {","    id: '1'","        ~~~","  }","}","Argument id: Got invalid value '1' on prisma.findOneUser. Provided String,expected Int.","    at Document.validate (/home/atran/workspace/m4m/m4m_server/node_modules/@prisma/client/runtime/index.js:76090:19)","    at NewprismaClient._executeRequest (/home/atran/workspace/m4m/m4m_server/node_modules/@prisma/client/runtime/index.js:77796:17)","    at resource.runInAsyncScope (/home/atran/workspace/m4m/m4m_server/node_modules/@prisma/client/runtime/index.js:77733:52)","    at AsyncResource.runInAsyncScope (async_hooks.js:188:21)","    at NewprismaClient._request (/home/atran/workspace/m4m/m4m_server/node_modules/@prisma/client/runtime/index.js:77733:25)","    at Object.then (/home/atran/workspace/m4m/m4m_server/node_modules/@prisma/client/runtime/index.js:77850:39)","    at process._tickCallback (internal/process/next_tick.js:68:7)"
          ]
        }
      }
    }
  ],"data": {
    "user": null
  }
}

解决方法

Prisma 需要一个 Int

"参数 ID:在prisma.findOneUser 上得到无效值'1'。提供 字符串,预期为整数。",

因此您需要将 id 转换为数字。也许是这样的:

user: async (parent,args,context) => {
  const id = +args.id;
  return context.prisma.user.findUnique({
    where: { id }
  });
}