0.7.5 • Published 6 years ago
@nestcfork/proxy v0.7.5
NestCloud - Proxy
Description
The proxy module for nestcloud.
Installation
$ npm install --save @nestcfork/proxyNotification
Don't use the body parser middleware when use this module.
Quick Start
Import Module
import { Module } from '@nestjs/common';
import { ProxyModule } from "@nestcfork/proxy";
@Module({
imports: [
ProxyModule.forRoot({
routes: [{
id: 'github',
uri: 'https://api.github.com',
}],
}),
]
})
export class AppModule {
}Import With Config Module
Except @nestcfork/boot module you can also use @nestcfork/config module too.
app.module.ts:
import { Module } from '@nestjs/common';
import { BOOT } from "@nestcfork/common";
import { BootModule } from "@nestcfork/boot";
import { ProxyModule } from "@nestcfork/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.comUsage
import { All, Controller, Param, Req, Res } from "@nestjs/common";
import { Request, Response } from 'express';
import { Proxy, InjectProxy } from "@nestcfork/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 "@nestcfork/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 '@nestcfork/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 "@nestcfork/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.
0.7.5
6 years ago