NestJS具有以下使用其HttpModule
的示例:
@Injectable()
export class CatsService {
constructor(private readonly httpService: HttpService) {}
findAll(): Observable<AxiosResponse<Cat[]>> {
return this.httpService.get('http://localhost:3000/cats');
}
}
我的问题是,客户端代码(最有可能是Controller
)如何处理此响应?它如何处理可观察对象,以便可以访问Cat[]
。或者,如果Http请求抛出诸如404之类的错误,该怎么办?
在这种情况下,NestJS客户端(控制器)如何与服务提供的findAll()
方法进行交互?
答案 0 :(得分:0)
我对NestJ不太熟悉,但是如果您想运行一个可观察的http请求,则可以执行以下操作来消耗和catchError
XCopyArea()
答案 1 :(得分:0)
如果由于某种原因,您提供给HttpService
的URL返回404,则该错误将通过服务传播回控制器,最终传播到调用原始URL的客户端。在幕后,NestJS将预订所有返回的Observable,以便您不必担心,您可以直接从Controller返回调用。因此,在上面的示例中,假设我们有一个看起来像这样的控制器:
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Get()
findAllCats(): Observable<Cat[]> {
return this.catsService.findAll();
}
}
CatsService
看起来像这样
@Injectable()
export class CatsService {
constructor(private readonly httpService: HttpService) {}
findAll(): Observable<Cat[]> {
return this.httpService.get('http://localhost:3000/cats');
}
}
假设您正在呼叫另一台服务器(即该服务器未在端口3000上运行),并且 /cats
不是有效的端点,并且该服务器向您返回404,httpService
的响应将通过CatsService冒泡到达CatsController,由NestJS处理订阅,并将响应发送回客户端。如果您要进行一些自定义错误处理,则需要以其他方式进行处理。测试HttpService
对事物的反应的一种好方法是创建一个简单的终结点并调用错误的URL(例如https://google.com/item
,它是404)