NestCloud - Proxy
Description
The proxy module for nestcloud.
Installation
$ npm install --save @nestcloud2/proxy
Notification
Don't use the body parser middleware when use this module.
Quick Start
Import Module
import { Module } from '@nestjs/common';
import { ProxyModule } from '@nestcloud2/proxy';
@Module({
imports: [
ProxyModule.forRoot({
routes: [
{
id: 'github',
uri: 'https://api.github.com',
},
],
}),
],
})
export class AppModule {}
Import With Config Module
Except @nestcloud2/boot
module you can also use @nestcloud2/config
module too.
app.module.ts:
import { Module } from '@nestjs/common';
import { BOOT } from '@nestcloud2/common';
import { BootModule } from '@nestcloud2/boot';
import { ProxyModule } from '@nestcloud2/proxy';
import { resolve } from 'path';
@Module({
imports: [
BootModule.forRoot({
filePath: resolve(__dirname, 'config.yaml'),
}),
ProxyModule.forRootAsync({ inject: [BOOT] }),
],
})
export class AppModule {}
config.yaml:
proxy:
routes:
- id: github
uri: https://api.github.com
Usage
import { All, Controller, Param, Req, Res } from '@nestjs/common';
import { Request, Response } from 'express';
import { Proxy, InjectProxy } from '@nestcloud2/proxy';
@Controller('/proxy/:service')
export class ProxyController {
constructor(@InjectProxy() private readonly proxy: Proxy) {}
@All()
do(@Req() req: Request, @Res() res: Response, @Param('service') id) {
this.proxy.forward(req, res, id);
}
}
Then visit http://localhost:{port}/proxy/github
Filters
Proxy module have RequestHeaderFilter
and ResponseHeaderFilter
internal filters.
If you want to use a custom filter, please implement Filter
interface
and then use UseFilters
decorator import your custom filter.
How To Use Filter
import { Module } from '@nestjs/common';
import { ProxyModule } from '@nestcloud2/proxy';
@Module({
imports: [
ProxyModule.forRoot({
routes: [
{
id: 'github',
uri: 'https://api.github.com',
filters: [
{
name: 'RequestHeaderFilter',
parameters: {
Authorization: 'Basic dGVzdDp0ZXN0',
},
},
],
},
],
}),
],
})
export class AppModule {}
Custom Filter
If you need custom a proxy filter, you need implement Filter
interface:
import { ClientRequest, IncomingMessage } from 'http';
import { Filter, Request, Response, ProxyErrorException } from '@nestcloud2/proxy';
class CustomFilter implements Filter {
before(request: Request, response: Response): boolean | Promise<boolean> {
return true;
}
error(error: ProxyErrorException, request: Request, response: Response) {}
request(proxyReq: ClientRequest, request: Request, response: Response) {}
response(proxyRes: IncomingMessage, request: Request, response: Response) {}
}
And then, create a register class, use UseFilters
to import your custom filter.
import { Injectable } from '@nestjs/common';
import { UseFilters } from '@nestcloud2/proxy';
import { CustomFilter } from './filters/CustomFilter';
@Injectable()
@UseFilters(CustomFilter)
export class ProxyFilterRegister {}
Now you can specific your custom filter by filter classname.
API
class ProxyModule
static forRoot(options: ProxyOptions = {}): DynamicModule
Register proxy module.
field | type | description |
---|---|---|
options.inject | string[] | BOOT CONFIG LOADBALANCE |
options.routes | Route[] | routes of proxy |
options.extras | ExtraOptions | please see http-proxy doc for detail |
class Proxy
forward(req: Request, res: Response, id: string)
forward the http request.
Stay in touch
- Author - NestCloud
License
NestCloud is MIT licensed.