http-proxy-middleware, блокирующий веб-страницу - PullRequest
0 голосов
/ 25 мая 2018

Есть ли у вас идеи, почему при открытии следующей веб-страницы в браузере она продолжает загружаться (блокироваться)?

http://localhost:3002/

Если вы поместите return; непосредственно передстрока: res.writeHead = (...args) => { writeHeadArgs = args; };, страница работает нормально, но логика кода не выполняется.Если вы поместите return после этой строки, он будет загружаться вечно.

Выполнить

$ node server.js

server.js

var express = require('express');
var http = require('http');
var proxy = require('http-proxy-middleware');

function bodyTransform(body) {
    return body.replace('World', 'People');
}

var onProxyRes = (proxyRes, req, res) => {

    const end = res.end;
    const writeHead = res.writeHead;
    let writeHeadArgs;
    let body;
    var buffer = new Buffer('');

    proxyRes.on('data', (chunk) => {
        console.log("inside: .on('data', ...)");
        buffer = Buffer.concat([buffer, chunk]);
    });
    proxyRes.on('end', () => {
        console.log("inside: .on('end', ...)");
        body = buffer.toString('utf8');
    });

    res.write = () => { };
    res.writeHead = (...args) => { writeHeadArgs = args; };

    res.end = () => {
        const output = bodyTransform(buffer.toString());
        res.setHeader('content-length', output.length);
        if (writeHeadArgs)
            writeHead.apply(res, writeHeadArgs);
        end.apply(res, [output]);
        console.log('after: end.apply(res, [output]);');
    };
}

const portApp01 = 3001;
const app01 = express()
app01.get('/', (req, res) => {
    res.send('Hello World!');
});
app01.listen(portApp01, () => {
    console.log('app01 is listening on port: ' + portApp01);
});

const portProxy = 3002;
const appProxy = express()
appProxy.use(proxy({ target:'http://localhost:3001', onProxyRes: onProxyRes, changeOrigin: true }));
http.createServer(appProxy).listen(portProxy, function () {
    console.log('appProxy is listening on port: ' + portProxy);
});

Это вывод, который я получаю на терминале:

[HPM] Proxy created: /  ->  http://localhost:3001
app01 is listening on port: 3001
appProxy is listening on port: 3002
inside: .on('data', ...)
inside: .on('end', ...)
after: end.apply(res, [output]);

Есть идеи, как это решить?

Спасибо!

...