@nestcloud2/proxy
TypeScript icon, indicating that this package has built-in type declarations

0.8.5 • Public • Published

NestCloud - Proxy

NPM Version Package License NPM Downloads Travis Linux Coverage

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

License

NestCloud is MIT licensed.

Readme

Keywords

none

Package Sidebar

Install

npm i @nestcloud2/proxy

Weekly Downloads

2

Version

0.8.5

License

MIT

Unpacked Size

44.2 kB

Total Files

51

Last publish

Collaborators

  • ahdng