【问题标题】:How to get data for _links in nextjs external api call如何在 nextjs 外部 api 调用中获取 _links 的数据
【发布时间】:2022-02-15 02:10:58
【问题描述】:

我在我的 nestjs 应用程序中调用一个 api。 api 的响应有下面的 hatoas 格式

这是我的代码

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 数据?

【问题讨论】:

  • this.httpService是如何定义的?好像您正在使用 RxJS 的 .pipe/map/tap。
  • @JonathanRosa 它是nestjs HttpService,它在neath 下使用axios,我更新了问题
  • 我有点困惑 - console.log(data) 的输出是指您问题中的 json-array 吗?还是console.log(data?._links?._next)的输出?
  • @Reza 我的意思是你的嵌套端代码,而不是你的客户端服务。那里发生了什么? NestJS 和 axios 都没有去掉下划线的属性。
  • @JonathanRosa 好的,让我创建 stackblitz 来复制和分享

标签: node.js axios nestjs hateoas


【解决方案1】:

在尝试重现问题后,我找到了根本原因。我把它写在这里以防其他人遇到同样的问题并找到这篇文章。

我发现当我在邮递员中调用 api 时,响应有 Content_type: application/hal+json 标头,而在邮递员的请求标头中,我们有 Accept:*/*

如果您更改它Accept:application/json,您将收到数据数组(就像我在代码中收到的一样)

所以我做了什么我把我的代码改成了下面,现在我得到了res.data上的所有_link信息

return this.httpService
                    .get<any>(url, {
                        headers: {
                            Accept: 'application/hal+json',
                            Authorization: `Bearer ${token}`
                        }
                    })

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 2022-07-15
    • 2022-06-14
    • 2021-04-22
    • 2019-11-19
    • 2017-07-06
    • 2017-12-06
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多