我如何通过 nodejs 通过 apollo-server 从服务器获取所有数据

Posted

技术标签:

【中文标题】我如何通过 nodejs 通过 apollo-server 从服务器获取所有数据【英文标题】:How can i get all data from server by apollo-server by nodejs 【发布时间】:2021-12-10 05:28:15 【问题描述】:

我想获取参与者、提议、用户等所有数据。

产品包括建议。 建议包括参与者。

如果我使用查询,我想获取所有数据, 测试查询仅显示 userId,但我想要有关用户的所有信息 测试查询仅显示proposalId,但我想要关于proposal的所有信息

棱镜模型

model Product 
  id       Int       @id @default(autoincrement())
  prodName String
  prodCode String
  posts    Post[]
  holdings Holding[]
  proposes Propose[]

model Propose 
  id           Int           @id @default(autoincrement())
  user         User          @relation(fields: [userId], references: [id])
  userId       Int
  product      Product       @relation(fields: [productId], references: [id])
  productId    Int
  title        String
  content      String
  totalAmt     Int
  participants Participant[]
  createdAt    DateTime      @default(now())

model Participant 
  id             Int      @id @default(autoincrement())
  user           User     @relation(fields: [userId], references: [id])
  userId         Int
  propose        Propose  @relation(fields: [proposeId], references: [id])
  proposeId      Int
  amt            Int
  participatedAt DateTime @default(now())

类型

type Participant 
    id: Int!
    user: User
    propose: Propose
    amt: Int
    participatedAt: String
  
  type seeParticipantResult 
    ok: Boolean!
    participants: [Participant]
    error: String
  
  type Query 
    seeParticipant: seeParticipantResult
  

查询

export default 
  Query: 
    seeParticipant: async (_, __,  loggedInUser ) => 
      try 
        const participants = await client.participant.findMany(
          where: 
            userId: loggedInUser.id,
          ,
        );
        return 
          ok: true,
          participants,
        ;
       catch (e) 
        return 
          ok: false,
          error: e,
        ;
      
    ,
  ,
;

测试查询

query Query 
  seeParticipant 
    ok
    participants 
      id
      user 
        username
      
      propose 
        product 
          prodName
          prodCode
        
        title
      
    
  

结果

  "data": 
    "seeParticipant": 
      "ok": true,
      "participants": [
        
          "id": 1,
          "user": null,
          "propose": null
        
      ]
    
  

它不显示提议和用户。

【问题讨论】:

您有 Participant.propose 的解析器吗?您的解析器正在返回参与者,但没有返回任何加入的关系。 【参考方案1】:

Prisma 不会通过查询自动返回 relation 对象。使用 GraphQL 时,您应该为任何关系字段(例如 GraphQL Schema 中的Participant.user)创建单独的解析器函数。

Participant.user 的解析器可能看起来像这样:

  Participant: 
    user: (parent, args, context) => 
      return client.participant.findUnique(where: id: parent.id).user()
    
  

我正在使用 Prisma fluent API 从 findUnique 查询 participant 获取连接的 user

请注意,您需要为 Propose 执行类似的操作。

【讨论】:

以上是关于我如何通过 nodejs 通过 apollo-server 从服务器获取所有数据的主要内容,如果未能解决你的问题,请参考以下文章

如何通过NodeJS将对象传递给前端

如何将 NodeJS 调试器通过隧道传送到 Vagrant 框?

如何获取通过贝宝交易发送的变量(NODEJS)

我如何通过 nodejs 通过 apollo-server 从服务器获取所有数据

如何通过管道传输到文件(NodeJS)

通过Vuejs调用时如何使Nodejs重定向工作