簡體   English   中英

NestJs:根據外部 API 調用返回修改后的響應

[英]NestJs: return modified response based on external API call

我是 NestJs、Graphql、typescript 的新手。

我需要進行外部 API 調用,這基本上是 Graphql 查詢本身,如果需要修改響應,並在本例test中返回原始請求/查詢的響應,即查詢名稱。

我有以下代碼

@Query(returns => BlogPost) // @objectType
  async test() {
    const endpoint = 'https://testing.org/api/content/project-dev/graphql' 
    const graphQLClient = new GraphQLClient(endpoint, {
      headers: {
        authorization: 'Bearer xxxx',
      },
    })
    const query = gql`
      {
        queryContentContentsWithTotal(top: 10) {
          total
        }
      }`

    const data = await graphQLClient.request(query)
    console.log(JSON.stringify(data, undefined, 2))
    return data;
  }

BlogPostObjectType ,它看起來像:

import { Field, ObjectType } from '@nestjs/graphql';

@ObjectType()
export class BlogPost {
  @Field({ nullable: true })
  total!: number;
}

我還放置了 console.log 以查看外部 API 調用響應,即:

{
  "queryContentContentsWithTotal": {
    "total": 1
  }
}

但查詢的 Graphql 響應是:

{
  "data": {
    "test": {
      "total": null // this needs to be 1 
    }
  }
}

total是 null 其中 API 調用返回total 1;

如何在這里靈活地完成映射,以使查詢響應看起來相同?

GraphQL 期望您的返回數據為

{
  "total": "number of some sort"
}

但是您實際上以以下形式返回數據

{
  "queryContentContentsWithTotal": {
    "total": 1
  }
}

所以 GraphQL 引擎無法理解返回類型。 您需要將您的數據 map 正確返回,如下所示:

@Query(returns => BlogPost) // @objectType
  async test() {
    const endpoint = 'https://testing.org/api/content/project-dev/graphql' 
    const graphQLClient = new GraphQLClient(endpoint, {
      headers: {
        authorization: 'Bearer xxxx',
      },
    })
    const query = gql`
      {
        queryContentContentsWithTotal(top: 10) {
          total
        }
      }`

    const data = await graphQLClient.request(query)
    console.log(JSON.stringify(data, undefined, 2))
    return data.queryContentContentsWithTotal;
  }

您返回的data類型與BlogPost 你應該返回這個

return {total: data.queryContentContentsWithTotal.total}

暫無
暫無

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

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