0.7.5 • Published 4 years ago

@nestcfork/proxy v0.7.5

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

NestCloud - Proxy

Description

The proxy module for nestcloud.

Installation

$ npm install --save @nestcfork/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 "@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.com

Usage

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.

fieldtypedescription
options.injectstring[]BOOT CONFIG LOADBALANCE
options.routesRoute[]routes of proxy
options.extrasExtraOptionsplease see http-proxy doc for detail

class Proxy

forward(req: Request, res: Response, id: string)

forward the http request.

Stay in touch

License

NestCloud is MIT licensed.