@catalist-nestjs/fetch
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

Fetch

NestJS Fetch for Catalist Finance projects. Part of Catalist NestJS Modules

The module is based on the node-fetch package.

Install

yarn add @catalist-nestjs/fetch

Usage

Basic usage

// Import
import { Module } from '@nestjs/common';
import { FetchModule } from '@catalist-nestjs/fetch';
import { MyService } from './my.service';

@Module({
  imports: [FetchModule.forFeature()],
  providers: [MyService],
  exports: [MyService],
})
export class MyModule {}

// Usage
import { FetchService } from '@catalist-nestjs/fetch';

export class MyService {
  constructor(private fetchService: FetchService) {}

  async myFetch() {
    return await this.fetchService.fetchJson('/url');
  }
}

The fetchService provides 2 methods: fetchJson and fetchText, which are based on a call to the fetch function followed by a call to .json() or .text(). Method arguments are compatible with the fetch.

Global usage

import { Module } from '@nestjs/common';
import { FetchModule } from '@catalist-nestjs/fetch';

@Module({
  imports: [FetchModule.forRoot()],
})
export class MyModule {}

Async usage

import { Module } from '@nestjs/common';
import { FetchModule } from '@catalist-nestjs/fetch';
import { ConfigModule, ConfigService } from './my.service';

@Module({
  imports: [
    ConfigModule,
    FetchModule.forRootAsync({
      async useFactory(configService: ConfigService) {
        return { baseUrls: configService.baseUrls };
      },
      inject: [ConfigService],
    }),
  ],
})
export class MyModule {}

Module options

The forRoot and forFeature methods have the same options:

export interface FetchModuleOptions {
  baseUrls?: string[];
  retryPolicy?: RequestRetryPolicy;
}

export interface RequestRetryPolicy {
  delay?: number;
  attempts?: number;
}
Option Default Desc
baseUrls [] Array of base API URLs
delay 1000 Number of milliseconds between attempts
attempts 0 Number of times the query is retried

Example

// Import
import { Module } from '@nestjs/common';
import { FetchModule } from '@catalist-nestjs/fetch';
import { MyService } from './my.service';

@Module({
  imports: [
    FetchModule.forFeature({
      baseUrls: ['https://my-api.com', 'https://my-fallback-api.com'],
      retryPolicy: {
        delay: 2000,
        attempts: 3,
      },
    }),
  ],
  providers: [MyService],
  exports: [MyService],
})
export class MyModule {}

// Usage
import { FetchService } from '@catalist-nestjs/fetch';

export class MyService {
  constructor(private fetchService: FetchService) {}

  async myFetch() {
    return await this.fetchService.fetchJson('/foo');
  }
}

If the provided API services are unavailable, the following happens:

Local options

The retryPolicy for each query can be rewritten:

import { FetchService } from '@catalist-nestjs/fetch';

export class MyService {
  constructor(private fetchService: FetchService) {}

  async myFetch() {
    return await this.fetchService.fetchJson('/foo', {
      retryPolicy: {
        delay: 2000,
        attempts: 3,
      },
    });
  }
}

Package Sidebar

Install

npm i @catalist-nestjs/fetch

Weekly Downloads

12

Version

1.0.0

License

MIT

Unpacked Size

17 kB

Total Files

12

Last publish

Collaborators

  • upvu