在请求回调中请求不按预期行事(nodejs)

时间:2013-01-09 17:35:03

标签: node.js proxy request

我昨天下午开始玩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');
  })
});

1 个答案:

答案 0 :(得分:0)

问题是您要将返回值分配给authProxyproxy。您应该在不指定值的情况下致电requester,只需:

requester( object, callback );

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