0.7.1 • Published 4 years ago

@dimensionfourcloud/proxy v0.7.1

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

NestCloud - Proxy

Description

The proxy module for dimensionfourcloud.

中文文档

Installation

$ npm install --save @dimensionfourcloud/proxy

Notification

You should not use body parser middleware when use this module or the post request will hang.

Quick Start

Register Module

import { Module } from '@nestjs/common';
import { NEST_BOOT } from '@dimensionfourcloud/common';
import { ProxyModule } from "@dimensionfourcloud/proxy";

@Module({
    imports: [
        ProxyModule.register({dependencies: [NEST_BOOT]}),
    ]
})
export class AppModule {
}

Configurations

proxy:
  routes:
    - id: user
      uri: lb://dimensionfourcloud-user-service
      filters:
       - name: AddRequestHeaderFilter
         paramters: 
           request-id: 123
       - name: AddResponseHeaderFilter
         parameters:
           request-id: 456
    - id: pay
      uri: https://example.com/pay

Usage

import { All, Controller, Param, Req, Res } from "@nestjs/common";
import { Request, Response } from 'express';
import { Proxy, InjectProxy } from "@dimensionfourcloud/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);
    }
    
    private updatRoutes() {
        const routes = [{id: 'example', uri: 'lb://example-service'}];
        this.proxy.updateRoutes(routes);
    }
}

Filters

There are AddRequestHeaderFilter and AddResponseHeaderFilter filters in internal proxy, if you want to use your own filter, please implement IFilter interface, then call registerFilter(filter: IFilter) function for registering filter.

class CustomFilter implements IFilter {
    before(request: IRequest, response: IResponse): boolean | Promise<boolean> {
        return undefined;
    }

    error(error: ProxyErrorException, request: IRequest, response: IResponse) {
    }

    getName(): string {
        return "CustomFilter";
    }

    request(proxyReq: ClientRequest, request: IRequest, response: IResponse) {
    }

    response(proxyRes: IncomingMessage, request: IRequest, response: IResponse) {
    }
}

API

class ProxyModule

static register(options: IProxyOptions = {}, proxy?: IExtraOptions): DynamicModule

Register proxy module.

fieldtypedescription
options.dependenciesstring[]NEST_BOOT or NEST_CONSUL_CONFIG
options.routesIRoute[]routes of proxy
proxyIExtraOptionsplease see http-proxy doc for detail

class Proxy

updateRoutes(routes: IRoute[], sync: boolean = true): void

Update proxy routes.

registerFilter(filter: IFilter)

Register your custom filter.

Stay in touch

License

NestCloud is MIT licensed.