【发布时间】:2022-01-26 16:30:12
【问题描述】:
我需要处理使用 HttpService(Nestjs 的 HttpModule)使用外部服务时可能发生的 http 错误状态代码(例如 401、500 等)。这是我正在处理的实现:
import { Injectable } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { Logger } from '@nestjs/common';
import { AxiosRequestConfig } from 'axios';
import { catchError, firstValueFrom, map } from 'rxjs';
type Person = {
name: string;
lastName: string;
};
@Injectable()
export class PersonService {
constructor(private httpService: HttpService) {}
async findPerson(): Promise<Person> {
const axiosConfig: AxiosRequestConfig = {
method: 'get',
url: 'https://service.dns/path/person',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${jwt}`,
},
validateStatus: function (status: number) {
return status === 200;
},
};
const personInstance: Person = await firstValueFrom(
this.httpService.request(axiosConfig).pipe(
catchError((e) => {
Logger.error(e.response.data.errorMessage);
throw new Error('internal communication error');
}),
map((res) => {
return res.data;
}),
),
);
return personInstance;
}
}
在上面的代码中,我只需要函数catchError抛出自定义错误,但我无法使函数validateStatus触发catchError的执行。
【问题讨论】:
-
这个答案可能会对您有所帮助。 stackoverflow.com/questions/55601651/…
标签: node.js typescript nestjs httpmodule httpservice