Создать прокси в NestJS - PullRequest
0 голосов
/ 08 мая 2018

Я создал прокси с nestjs.

Все заявки проходят нормально. За исключением запросов POST.

Посмотрите на мой код:

import { IncomingMessage } from 'http';
import { HttpUtils } from './../utils/http.utils';
import { Controller, Param, Req, Res, All } from '@nestjs/common';
import { Config } from './../system/config';
import { ServerResponse } from 'http';
import * as http from 'http';
import { CouchDB, Log } from 'system';
import { UsuarioModel } from 'model';

@Controller('__api-proxy')
export class ApiProxyController {

    @All('*')
    root(@Param() param, @Req() c_req: IncomingMessage, @Res() c_res: ServerResponse): any {

        // habilito o cors
        HttpUtils.enableCors(c_req, c_res);

        const urlDetail = HttpUtils.getUrlDetail(Config.getConfig().endpoints.webapi);

        // modifico para o hostname em que eu estou fazendo o proxy
        c_req.headers.host = urlDetail.hostname;

        // faço o proxy
        var proxy = http.request({
            hostname: urlDetail.hostname,
            port: urlDetail.port,
            method: c_req.method,
            headers: c_req.headers,
            path: '/' + param[0],
        }, (res) => {
            res.pause();
            res.headers.Server = `Sync Server ${Config.getConfig().package.version}`;

            if (Config.getConfig().endpoints.log) {
                Log.print('[ api ] [' + c_req.connection.remoteAddress + ']     : ' + c_req.method + ' ' + res.statusCode + ' ' + c_req.url);
            }

            c_res.writeHead(res.statusCode, res.headers);
            res.pipe(c_res, {end: true});
            res.resume();
        });

        c_req.pipe(proxy, {end: true});
    }
}

NodeJS error

Error: socket hang up
    at createHangUpError (_http_client.js:331:15)
    at Socket.socketOnEnd (_http_client.js:423:23)
    at emitNone (events.js:111:20)
    at Socket.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1056:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

До того как все заработало нормально, после того, как я поставил прокси под NestJS, работают только запросы GET и OPTIONS. Вы можете мне помочь?

1 Ответ

0 голосов
/ 18 мая 2018

Для решения проблемы:

В main.ts сразу после моего const app = await NestFactory.create(AppModule); я добавил следующие строки:

app.use('__bank-agency-gateway', proxy(config.endpoints.bankAgencyGateway));
app.use('__bank-account', proxy(config.endpoints.bankAcountCenter));
app.use('__bank-safebox', proxy(config.endpoints.bankSafebox));
app.use('__visa-proxy', proxy(config.endpoints.visaProxy));

И я использовал прокси-библиотеку express-http-proxy, т.е. запросы, которые не направлены на мои прокси-серверы NestJS, могут действовать.

Спасибо

...