0.8.5 • Published 2 years ago

@nestcloud2/http v0.8.5

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

NestCloud - Http

Description

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

Installation

$ npm i --save @nestcloud2/http

Quick Start

Import Module

import { Module } from '@nestjs/common';
import { HttpModule } from '@nestcloud2/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 '@nestcloud2/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 '@nestcloud2/http';

@Injectable()
// enable loadbalance supports, need import @nestcloud2/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 '@nestcloud2/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 '@nestcloud2/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 @nestcloud2/brakes module at first.

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

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

Write a fallback class.

import { Fallback } from '@nestcloud2/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 '@nestcloud2/http';
import { UseFallback } from '@nestcloud2/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.

0.9.1

2 years ago

0.9.1-rc.0

2 years ago

0.8.5

2 years ago

0.9.0

2 years ago

0.8.3

2 years ago

0.8.0

2 years ago

0.7.21

2 years ago

0.7.20

2 years ago