0

我昨天下午开始玩nodejs。今天早上我开始写一个代理服务器,收到请求后有以下要求:

  • 执行身份验证检查(通过 request())
  • 如果 auth check 评估为 true,则执行实际请求(代理)
  • 否则,重定向

一切正常,除了实际的代理请求(分配给代理 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');
  })
});
4

1 回答 1

0

问题是您正在为authProxyand分配返回值proxy。您应该requester在不分配值的情况下调用,只需:

requester( object, callback );

我不确定requester您的代码中返回了什么,但是在调用异步函数时,您通常不会期望返回值,而是处理callback作为参数传递的所有其他内容。也许如果您添加该代码的示例(请求者函数),事情会更清楚:)

于 2013-01-09T18:43:37.577 回答