我们在 node.js 中有以下示例
var http = require('http');
http.createServer(function(request, response) {
var proxy = http.createClient(8083, '127.0.0.1')
var proxy_request = proxy.request(request.method, request.url, request.headers);
proxy_request.on('response', function (proxy_response) {
proxy_response.pipe(response);
response.writeHead(proxy_response.statusCode, proxy_response.headers);
});
setTimeout(function(){
request.pipe(proxy_request);
},3000);
}).listen(8081, '127.0.0.1');
该示例侦听 127.0.0.1:8081 中的请求并将其发送到 127.0.0.1:8083 中的虚拟服务器(始终返回 200 OK 状态码)。
当我们之前有一个异步模块(在本例中为 setTimeOut 时间)时,问题出在输入流(可读)和输出流(可写)之间的管道中。管道不起作用,并且没有任何内容发送到 8083 端口中的虚拟服务器。
也许,当我们在管道调用之前进行异步调用(在本例中为 setTimeOut)时,输入流会变为“不可读”状态,而在异步调用之后,管道不会发送任何内容。
这只是一个示例……我们使用来自 node.js 社区的更多异步模块对其进行测试,结果相同(ldapjs 等)……
我们尝试通过以下方式修复它: - request.readable =true; //在管道调用之前 - request.pipe(proxy_request, {end : false}); 结果相同(管道不起作用)。
有人可以帮助我们吗?