无法使用 nest.js HttpService 发出成功的请求

Unable to make successful requests using nest.js HttpService

我正在尝试使用他们的文档中指定的 nest.js HttpService 发出请求,但我一直收到无法理解的错误。

我已经导入了 HttpModule

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [HttpModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

我正在尝试像这样使用 HttpService:

import { HttpService } from '@nestjs/axios';
import { Controller, Get } from '@nestjs/common';
import { lastValueFrom } from 'rxjs';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(
    private readonly appService: AppService,
    private httpService: HttpService
  ) {}

  @Get()
  async getHello(): Promise<string> {
    const req = this.httpService.get('https://icanhazdadjoke.com/');
    console.log(req)
    const res = await lastValueFrom(req);
    const data = res.data
    return data
  }
}

但是当我使用 curl 查询 get 端点时,我收到错误响应

http-test git:(master) ✗ curl localhost:3001
{"statusCode":500,"message":"Internal server error"}% 

我的控制台显示以下内容

[11:02:02 a.m.] File change detected. Starting incremental compilation...

[11:02:02 a.m.] Found 0 errors. Watching for file changes.

[Nest] 73798  - 2022-03-22, 11:02:03 a.m.     LOG [NestFactory] Starting Nest application...
[Nest] 73798  - 2022-03-22, 11:02:03 a.m.     LOG [InstanceLoader] HttpModule dependencies initialized +36ms
[Nest] 73798  - 2022-03-22, 11:02:03 a.m.     LOG [InstanceLoader] AppModule dependencies initialized +1ms
[Nest] 73798  - 2022-03-22, 11:02:03 a.m.     LOG [RoutesResolver] AppController {/}: +5ms
[Nest] 73798  - 2022-03-22, 11:02:03 a.m.     LOG [RouterExplorer] Mapped {/, GET} route +2ms
[Nest] 73798  - 2022-03-22, 11:02:03 a.m.     LOG [NestApplication] Nest application successfully started +2ms
Observable { _subscribe: [Function (anonymous)] }
[Nest] 73798  - 2022-03-22, 11:02:06 a.m.   ERROR [ExceptionsHandler] Request failed with status code 503
Error: Request failed with status code 503
    at createError (/Users/sv/projects/http-test/node_modules/@nestjs/axios/node_modules/axios/lib/core/createError.js:16:15)
    at settle (/Users/sv/projects/http-test/node_modules/@nestjs/axios/node_modules/axios/lib/core/settle.js:17:12)
    at IncomingMessage.handleStreamEnd (/Users/sv/projects/http-test/node_modules/@nestjs/axios/node_modules/axios/lib/adapters/http.js:322:11)
    at IncomingMessage.emit (events.js:412:35)
    at endReadableNT (internal/streams/readable.js:1317:12)
    at processTicksAndRejections (internal/process/task_queues.js:82:21)

A 503 是服务不可用。我可以使用 curlxh 拨打电话,而且效果很好。检查他们的 API 文档,看起来你需要设置 User-Agent header 才能使用他们的 API,比如

return this.
  .get('https://icanhazdadjoke.com', {
    headers: { accept: '*/*', 'User-Agent': 'NestJS Dad Joke' },
  })
  .pipe(map((res) => res.data));

可以正常工作。 Check their API docs for more information