![](/img/trans.png)
[英]NestJS/Express return PDF file from external URL in response
[英]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;
}
BlogPost
是ObjectType
,它看起來像:
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.