我正在创建一个NestJS应用程序,在那里我发出第三方API请求。为此,我必须在每个函数中编写相同的内容,以便获取数据。
为了使事情不重复,我如何编写具有基于GET或POST请求的API请求的公共类,并发送响应,以便我可以在每个函数中使用该类。
下面是我的代码:
- 订阅服务ts**
@Injectable()
export class SubscribeService {
constructor(@InjectModel('Subscribe') private readonly model:Model<Subscribe>,
@Inject(CACHE_MANAGER) private cacheManager:Cache,
private httpService: HttpService){}
async addSubscriber(subscriberDto:SubscribeDto){
const url = 'https://track.cxipl.com/api/v2/phone-tracking/subscribe';
const headersRequest = {
'content-Type': 'application/json',
'authkey': process.env.AUTHKEY
};
try{
const resp = await this.httpService.post(url,subscriberDto,{ headers: headersRequest }).pipe(
map((response) => {
if(response.data.success == true){
const data = new this.model(subscriberDto);
// return data.save();
const saved = data.save();
if(saved){
const msgSuccess = {
"success":response.data.success,
"status":response.data.data.status
}
return msgSuccess;
}
}
else{
const msgFail = {"success":response.data.success}
return msgFail;
}
}),
);
return resp;
}
catch(err){
return err;
}
}
async getLocation(phoneNumber:PhoneNumber){
try{
const location = await this.cacheManager.get<Coordinates>(phoneNumber.phoneNumber);
if(location){
return location;
}
else{
const resp = await axios.post('https://track.cxipl.com/api/v2/phone-tracking/location',phoneNumber,{headers:{
'content-Type': 'application/json',
'authkey': process.env.AUTHKEY
}});
const msg:Coordinates = {
"location":resp.data.data.location,
"timestamp":resp.data.data.timestamp
}
await this.cacheManager.set<Coordinates>(phoneNumber.phoneNumber,msg, { ttl: 3600 });
return msg;
}
}
catch(err){
console.log(err);
return err;
}
}
}
在上面的代码中,在addSubscriber()
和getLocation()
函数中,我需要反复点击API,并一次又一次地添加请求头,有没有什么方法可以让我为请求和响应创建一个单独的类,并在我的服务中使用。
我怎样才能达到预期的效果?
1条答案
按热度按时间vkc1a9a21#
要在NestJS中创建一个用于发出第三方API请求的公共类,可以执行以下步骤:
1.在NestJS项目中创建一个新文件来存储公共类,例如,可以在src/common目录中创建一个名为API.service.ts的文件。
1.在该文件中,创建一个名为ApiService的新类,该类将负责发出API请求,该类应该有一个构造函数来注入必要的依赖项,例如NestJS提供的HttpService。
1.为要发出的每种类型的API请求向ApiService类添加方法。例如,您可能有一个get()方法用于发出GET请求,一个post()方法用于发出POST请求,等等。每个方法都应接受发出请求所需的参数(如URL和任何查询参数或请求正文),并使用HttpService发出请求。
1.在需要发出API请求的任何地方注入ApiService。例如,您可以将其注入到服务或控制器中,并使用ApiService的方法发出实际的API请求。
这只是在NestJS中创建用于发出第三方API请求的公共类的一种方法。