nest-feign v3.7.4
Description
A component of nestcloud. NestCloud is a nest framework micro-service solution.
This is a Nest module for writing nestjs http clients easier.
Installation
$ npm i --save nest-feign nest-consul-loadbalance nest-consul consul
Quick Start
Import Module
import { Module } from '@nestjs/common';
import { FeignModule, CONSUL_LOADBALANCE } from 'nest-feign';
@Module({
imports: [FeignModule.register({
dependencies: [], // If use nest-consul-loadbalance module, please set NEST_CONSUL_LOADBALANCE
axiosConfig: {},
})],
})
export class ApplicationModule {}
Injection
UserClient:
import { Injectable } from "@nestjs/common";
import { Loadbalanced, Get, Query, Post, Body, Param, Put, Delete } from "nest-feign";
@Injectable()
@Loadbalanced('user-service') // open lb support
export class UserClient {
@Get('/users')
getUsers(@Query('role') role: string) {
}
@Get('http://test.com/users')
@Loadbalanced(false) // close lb support
getRemoteUsers() {
}
@Post('/users')
createUser(@Body('user') user: any) {
}
@Put('/users/:userId')
updateUser(@Param('userId') userId: string, @Body('user') user: any) {
}
@Delete('/users/:userId')
deleteUser(@Param('userId') userId: string) {
}
}
UserService:
export class UserService {
constructor(private readonly userClient: UserClient) {}
doCreateUser() {
this.userClient.createUser({name: 'test'});
}
}
API
Get|Post|Put|Delete|Options|Head|Patch|Trace(uri: string, options?: AxiosRequestConfig): MethodDecorator
Route decorator.
field | type | description |
---|---|---|
uri | string | the url |
options | object | axios config,see axios |
Param|Body|Query|Header(field?: string): ParameterDecorator
Parameter decorator.
field | type | description |
---|---|---|
field | string | the field name |
SetHeader|SetQuery|SetParam|SetBody(field: string, value: any): MethodDecorator
constant parameter decorator
field | type | description |
---|---|---|
field | string | the field name |
value | string | number | object | the 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.
Interceptor<T extends IInterceptor>(interceptor: { new(): T })
add interceptor,such as:
AddHeaderInterceptor.ts:
import { IInterceptor } from "nest-feign";
import { AxiosResponse, AxiosRequestConfig } from 'axios';
export class AddHeaderInterceptor implements IInterceptor {
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);
}
}
ArticleClient.ts:
import { Injectable } from "@nestjs/common";
import { Get, Interceptor } from "nest-feign";
import { AddHeaderInterceptor } from './AddHeaderInterceptor';
@Injectable()
@Interceptor(AddHeaderInterceptor)
export class ArticleClient {
@Get('https://api.apiopen.top/recommendPoetry')
getArticles() {
}
}
interceptor processing:
@Interceptor(Interceptor1)
@Interceptor(Interceptor2)
export class Client {
@Interceptor(Interceptor3)
@Interceptor(Interceptor4)
getArticles() {
}
}
console:
interceptor1 request
interceptor2 request
interceptor3 request
interceptor4 request
interceptor4 response
interceptor3 response
interceptor2 response
interceptor1 response
Stay in touch
- Author - Miaowing
License
NestCloud is MIT licensed.
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago