A component of nestcloud. NestCloud is a nest framework micro-service solution.
This is a Nest module for writing nestjs http clients easier.
$ npm i --save nest-feign nest-consul-loadbalance nest-consul consul
import { Module } from '@nestjs/common';
import { FeignModule, CONSUL_LOADBALANCE } from 'nest-feign';
@Module({
imports: [FeignModule.register({
adapter: '', // If use nest-consul-loadbalance module, please set CONSUL_LOADBALANCE
axiosConfig: {},
})],
})
export class ApplicationModule {}
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'});
}
}
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 |
Parameter decorator.
field | type | description |
---|---|---|
field | string | the field name |
constant parameter decorator
field | type | description |
---|---|---|
field | string | the field name |
value | string | number | object | the field value |
If set this decorator, it will return full http response.
If set this decorator, it will return response.headers.
It's a default decorator, it will return response.data.
set response data type, eg: 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream', default 'json'
Set response data encode, default 'utf8'
Open or close lb support.
add middleware,such as:
AddHeaderMiddleware.ts:
import { IMiddleware } from "nest-feign";
import { AxiosResponse, AxiosRequestConfig } from 'axios';
export class AddHeaderMiddleware implements IMiddleware {
send(request: AxiosRequestConfig): (response: AxiosResponse) => void {
request.headers['x-service'] = 'service-name';
return function (response: AxiosResponse) {
console.log(response.data);
};
}
}
ArticleClient.ts:
import { Injectable } from "@nestjs/common";
import { Get, Middleware } from "nest-feign";
import { AddHeaderMiddleware } from "./middlewares/AddHeaderMiddleware";
@Injectable()
@Middleware(AddHeaderMiddleware)
export class ArticleClient {
@Get('https://api.apiopen.top/recommendPoetry')
getArticles() {
}
}
middleware processing:
@Middleware(Middleware1)
@Middleware(Middleware2)
export class Client {
@Middleware(Middleware3)
@Middleware(Middleware4)
getArticles() {
}
}
console:
middleware4 request
middleware3 request
middleware2 request
middleware1 request
middleware1 response
middleware2 response
middleware3 response
middleware4 response
- Author - Miaowing
Nest is MIT licensed.