我昨天下午开始玩nodejs。今天早上我开始编写代理服务器,并在收到请求后提出以下要求:
所有工作都正确地阻止了实际的代理请求(分配给代理var)。它要么没有被调用,要么至少没有被回应到请求。或者别的,我觉得可能与nodejs的异步行为有关。
附加说明:“赢!”在控制台上输出。
欢迎任何想法。
var server = httpProxy.createServer(function(request, response, proxy) {
var requestHostname = request.headers['x-forwarded-host'];
var configFile = './config/'+requestHostname+'.js';
if(path.existsSync(configFile))
{
var config = require(configFile);
var authProxy = requester({
url: config.proxyRequest.url+config.proxyRequest.defaultPath,
port: 443,
method: request.method
}, function(error, proxyResp, body) {
if(config.methods.authCheck(body))
{
console.log('Win!');
proxy = requester({
url: 'http://www.google.com',
port: 443,
method: request.method
});
// Pipe request and response back
request.pipe(proxy);
proxy.pipe(response);
}
else
{
response.writeHead(300, 'Forbidden', {
'Location': globalConf.portalUrl
});
response.end();
}
});
}
else
{
response.writeHeader(400);
response.write('404: The requested URL '+requestHostname+' does not exist.');
response.end();
}
response.addListener('end', function() {
console.log('Ending it');
})
});
答案 0 :(得分:0)
问题是您要将返回值分配给authProxy
和proxy
。您应该在不指定值的情况下致电requester
,只需:
requester( object, callback );
我不确定代码中返回requester
是什么,但是当调用异步函数时,通常不会期望返回值,处理作为参数传递的callback
中的所有其他内容。也许如果你添加一个代码示例(请求函数),事情会更清楚:)