使用NestJS Axios,一个简单的http get请求抛出“Cannot read properties of undefined(阅读'emit')”错误

ubbxdtey  于 2023-04-30  发布在  iOS
关注(0)|答案(1)|浏览(1211)

我在NestJS项目中使用的版本(我只展示了相关的包):

  • “@nestjs/common”:“^9.4.0”,
  • “@nestjs/axios”:“^2.0.0”,
  • “axios”:“^1.3.6英寸,
  • “follow-redirects”:“^1.15.2”,

我试着从一开始就遵循这里的文档:https://docs.nestjs.com/techniques/http-module
我创建了一个名为geo.module.ts的模块,它看起来像这样:

import { Module } from '@nestjs/common';
import { GeoService } from './geo.service';
import { GeoController } from './geo.controller';
import { HttpModule } from '@nestjs/axios';

@Module({
  imports: [HttpModule.register({
    timeout: 5000,
    maxRedirects: 5,
  })],
  controllers: [GeoController],
  providers: [GeoService]
})
export class GeoModule {}

创建了指向服务的控制器,这很好,这里是服务:

import { HttpService } from '@nestjs/axios';
import { Injectable } from '@nestjs/common';

@Injectable()
export class GeoService {

  constructor(private readonly httpService: HttpService) {}

  findSomething() {
    return this.httpService.get('http://urldoesntmatter.something');
  }
}

此函数运行,并抛出如下错误:

[Nest] 424  - 2023. 04. 27. 7:49:48   ERROR [ExceptionsHandler] Cannot read properties of undefined (reading 'emit')
TypeError: Cannot read properties of undefined (reading 'emit')
    at Object.eventHandlers.<computed> [as abort] (C:\somewhere\node_modules\follow-redirects\index.js:14:24)
    at TransformOperationExecutor.transform (C:\somewhere\node_modules\src\TransformOperationExecutor.ts:207:39)      
    at TransformOperationExecutor.transform (C:\somewhere\node_modules\src\TransformOperationExecutor.ts:327:31)      
    at TransformOperationExecutor.transform (C:\somewhere\node_modules\src\TransformOperationExecutor.ts:327:31)      
    at TransformOperationExecutor.transform (C:\somewhere\node_modules\src\TransformOperationExecutor.ts:327:31)

对于我输入的任何URL,此错误都是真的。我在谷歌上搜索了一整天,但无法解决这个问题,为什么会发生这种情况,似乎基于文档,我没有错过任何东西。

  • 也许这些版本彼此之间不兼容?
  • 我已经尝试降级“跟随重定向”包也“axios”包,没有工作.
  • 已经尝试过直接使用“axios”包,也尝试过使用axiosRef。尝试了不同的URL,但即使在我本地运行的api上,它也抛出了这个错误。
  • 已尝试修改模块以设置“maxRedirects:5”到0。在这种情况下,有一个不同的错误,我也不想修改该值,默认情况下它是5。
  • 尝试修改url以使用https而不是http,没有成功。我已经检查了文件,以及错误发生的地方,但我仍然无法找出问题。
w1e3prcc

w1e3prcc1#

我想明白了。
基于THIS答案,我只是返回数据本身,而不是整个Axios对象。这最终解决了问题。(但这不是在医生。:))
更新后的代码如下所示:

import { HttpService } from '@nestjs/axios';
import { Injectable } from '@nestjs/common';

@Injectable()
export class GeoService {

  constructor(private readonly httpService: HttpService) {}

  findSomething() {
    return this.httpService.get('http://urldoesntmatter.something').pipe(
       map(response => response.data)
    );
  }
}

感谢您的时间,如果你已经看了,并试图解决这个问题。

相关问题