如何在 nextjs 外部 api 调用中获取 _links 的数据
How to get data for _links in nextjs external api call
我正在我的 nestjs 应用程序中调用 api。 api 的响应具有如下所示的 hateoas 格式
这是我的代码
import { HttpService, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { catchError, map, switchMap, tap } from 'rxjs/operators';
@Injectable()
export class IqProductQuantityService {
constructor(
private readonly httpService: HttpService
) {}
...
return this.httpService
.get<any>(url, {
headers: {
Authorization: `Bearer ${token}`
}
})
.pipe(
map((res) => res.data),
tap((data) => console.log(data)),
tap((data) => console.log(data?._links?._next))
);
问题是当我获取数据时,我收到了 项目数组 ,并且响应中没有 _links 或 _embeded 数据,看来 axios 或 nestjs 正在解析此数据优雅地让生活更轻松,但同时我们丢失了_links.next
的信息来进行分页
这是我收到的:
console.log(data):
[
{
Id: '82cf8651-c742-4352-aa70-001ee180707c',
CompanyId: 13279,
EntityId: 22235,
IsSerialized: false,
IsDropShippable: false,
IsLot: false,
QuantityInStock: 0,
QuantityOnOrder: 0,
QuantityTransferIn: 0,
QuantityTransferOut: 0,
UnitId: 0
},
{
Id: '82cf8651-c742-4352-aa70-001ee180707c',
CompanyId: 13279,
EntityId: 22236,
IsSerialized: false,
IsDropShippable: false,
IsLot: false,
QuantityInStock: 0,
QuantityOnOrder: 0,
QuantityTransferIn: 0,
QuantityTransferOut: 0,
UnitId: 0
},
{
Id: '82cf8651-c742-4352-aa70-001ee180707c',
CompanyId: 13279,
EntityId: 22237,
IsSerialized: false,
IsDropShippable: false,
IsLot: false,
QuantityInStock: 0,
QuantityOnOrder: 0,
QuantityTransferIn: 0,
QuantityTransferOut: 0,
UnitId: 0
}
]
console.log(data?._links?._next)
:
undefined
问题是我应该如何检索 _links.next.href
数据?
在尝试重现问题后,我找到了根本原因。我把它写在这里以防其他人遇到同样的问题并找到这个 post.
我发现当我在 postman 中调用 api 时,响应有 Content_type: application/hal+json
header,而在 postman 中请求 [=24] =] 我们有 Accept:*/*
如果你改变它Accept:application/json
你将收到数据数组(就像我在我的代码中收到的一样)
所以我做了什么,我将我的代码更改为下面,现在我得到了 res.data
上的所有 _link 信息
return this.httpService
.get<any>(url, {
headers: {
Accept: 'application/hal+json',
Authorization: `Bearer ${token}`
}
})
我正在我的 nestjs 应用程序中调用 api。 api 的响应具有如下所示的 hateoas 格式
这是我的代码
import { HttpService, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { catchError, map, switchMap, tap } from 'rxjs/operators';
@Injectable()
export class IqProductQuantityService {
constructor(
private readonly httpService: HttpService
) {}
...
return this.httpService
.get<any>(url, {
headers: {
Authorization: `Bearer ${token}`
}
})
.pipe(
map((res) => res.data),
tap((data) => console.log(data)),
tap((data) => console.log(data?._links?._next))
);
问题是当我获取数据时,我收到了 项目数组 ,并且响应中没有 _links 或 _embeded 数据,看来 axios 或 nestjs 正在解析此数据优雅地让生活更轻松,但同时我们丢失了_links.next
的信息来进行分页
这是我收到的:
console.log(data):
[
{
Id: '82cf8651-c742-4352-aa70-001ee180707c',
CompanyId: 13279,
EntityId: 22235,
IsSerialized: false,
IsDropShippable: false,
IsLot: false,
QuantityInStock: 0,
QuantityOnOrder: 0,
QuantityTransferIn: 0,
QuantityTransferOut: 0,
UnitId: 0
},
{
Id: '82cf8651-c742-4352-aa70-001ee180707c',
CompanyId: 13279,
EntityId: 22236,
IsSerialized: false,
IsDropShippable: false,
IsLot: false,
QuantityInStock: 0,
QuantityOnOrder: 0,
QuantityTransferIn: 0,
QuantityTransferOut: 0,
UnitId: 0
},
{
Id: '82cf8651-c742-4352-aa70-001ee180707c',
CompanyId: 13279,
EntityId: 22237,
IsSerialized: false,
IsDropShippable: false,
IsLot: false,
QuantityInStock: 0,
QuantityOnOrder: 0,
QuantityTransferIn: 0,
QuantityTransferOut: 0,
UnitId: 0
}
]
console.log(data?._links?._next)
:
undefined
问题是我应该如何检索 _links.next.href
数据?
在尝试重现问题后,我找到了根本原因。我把它写在这里以防其他人遇到同样的问题并找到这个 post.
我发现当我在 postman 中调用 api 时,响应有 Content_type: application/hal+json
header,而在 postman 中请求 [=24] =] 我们有 Accept:*/*
如果你改变它Accept:application/json
你将收到数据数组(就像我在我的代码中收到的一样)
所以我做了什么,我将我的代码更改为下面,现在我得到了 res.data
return this.httpService
.get<any>(url, {
headers: {
Accept: 'application/hal+json',
Authorization: `Bearer ${token}`
}
})