0.7.5 • Published 4 years ago

@nestcfork/http v0.7.5

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

NestCloud - Http

Description

This is a Nest module for writing nestjs http clients easier.

Installation

$ npm i --save @nestcfork/http

Quick Start

Import Module

import { Module } from '@nestjs/common';
import { HttpModule } from '@nestcfork/http';

@Module({
  imports: [
      HttpModule.forRoot(),
  ],
})
export class AppModule {
}

Configurations

http:
  axios:
    timeout: 1000

Usage

import { Injectable } from "@nestjs/common";
import { Get, Query, Post, Body, Param, Put, Delete } from "@nestcfork/http";

@Injectable()
export class UserClient {
    @Get('http://test.com/users')
    getUsers(@Query('role') role: string) {
    }
    
    @Post('http://test.com/users')
    createUser(@Body('user') user: any) {
    }
    
    @Put('http://test.com/users/:userId')
    updateUser(@Param('userId') userId: string, @Body('user') user: any) {
    }
    
    @Delete('http://test.com/users/:userId')
    deleteUser(@Param('userId') userId: string) {
    }
}

Loadbalance

import { Injectable } from "@nestjs/common";
import { Loadbalanced, Get, Query } from "@nestcfork/http";

@Injectable()
// enable loadbalance supports, need import @nestcfork/loadbalance module at first.
@Loadbalanced('user-service')
export class UserClient {
    @Get('/users')
    getUsers(@Query('role') role: string) {
    }
    
    @Get('http://test.com/users')
    // disable loadbalance supports.
    @Loadbalanced(false)
    getRemoteUsers() {
    }
}

Interceptor

import { Injectable } from '@nestjs/common';
import { Interceptor } from "@nestcfork/http";
import { AxiosResponse, AxiosRequestConfig } from 'axios';

@Injectable()
export class AddHeaderInterceptor implements Interceptor {
    onRequest(request: AxiosRequestConfig): AxiosRequestConfig {
        request.headers['x-service'] = 'service-name';
        return request;
    }
    
    onResponse(response: AxiosResponse): AxiosResponse {
        return response;
    }
    
    onRequestError(error: any): any {
        return Promise.reject(error);
    }
    
    onResponseError(error: any): any {
        return Promise.reject(error);
    }
}
import { Injectable } from "@nestjs/common";
import { Get, UseInterceptors } from "@nestcfork/http";
import { AddHeaderInterceptor } from "./middlewares/AddHeaderInterceptor";

@Injectable()
@UseInterceptors(AddHeaderInterceptor)
export class ArticleClient {
    @Get('https://api.apiopen.top/recommendPoetry')
    getArticles() {
    }
}

examples:

@UseInterceptors(Interceptor1)
@UseInterceptors(Interceptor2)
export class Client {

    @UseInterceptors(Interceptor3)
    @UseInterceptors(Interceptor4)
    getArticles() {
    }
}

result:

interceptor1 request
interceptor2 request
interceptor3 request
interceptor4 request
interceptor4 response
interceptor3 response
interceptor2 response
interceptor1 response

Brakes

Import @nestcfork/brakes module at first.

import { Module } from '@nestjs/common';
import { BrakesModule } from '@nestcfork/brakes';

@Module({
  imports: [
      BrakesModule.forRoot(),
  ],
})
export class AppModule {
}

Write a fallback class.

import { Fallback } from '@nestcfork/brakes';
import { BadRequestException, Injectable } from '@nestjs/common';

@Injectable()
export class UserFallback implements Fallback {
  config() {
    return {};
  }

  fallback(...params) {
    throw new BadRequestException('fallback invoke');
  }

  healthCheck() {
  }
}

Use fallback.

import { Injectable } from '@nestjs/common';
import { Get } from '@nestcfork/http';
import { UseFallback } from '@nestcfork/brakes';
import { UserFallback } from './UserFallback';

@Injectable()
@UseFallback(UserFallback)
export class UserClient {
  @Get('/users')
  getUsers(): any {
  }
}

API

Get|Post|Put|Delete|Options|Head|Patch|Trace(uri: string, options?: AxiosRequestConfig): MethodDecorator

Route decorator.

fieldtypedescription
uristringthe url
optionsobjectaxios config,see axios

Param|Body|Query|Header(field?: string): ParameterDecorator

Parameter decorator.

fieldtypedescription
fieldstringthe field name

SetHeader|SetQuery|SetParam|SetBody(field: string, value: any): MethodDecorator

constant parameter decorator

fieldtypedescription
fieldstringthe field name
valueanythe field value

Response(): MethodDecorator

If set this decorator, it will return full http response.

ResponseHeader(): MethodDecorator

If set this decorator, it will return response.headers.

ResponseBody(): MethodDecorator

It's a default decorator, it will return response.data.

ResponseType(type: string): MethodDecorator

set response data type, eg: 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', default 'json'

ResponseEncode(type: string): MethodDecorator

Set response data encode, default 'utf8'

Loadbalanced(service: string | boolean): ClassDecorator | MethodDecorator

Open or close lb support.

UseInterceptors<T extends IInterceptor>(...interceptors: Function[])

Use interceptor, supports dynamic import and inject.

Stay in touch

License

NestCloud is MIT licensed.