0

昨日の午後、nodejsで遊び始めました。今朝、私はプロキシ サーバーの作成を開始しました。リクエストを受信したら、次の要件があります。

  • 認証チェックを実行します (request() を介して)
  • 認証チェックがtrueと評価された場合、実際のリクエストを行います(プロキシ)
  • それ以外の場合は、リダイレクト

すべてが正しく機能し、実際のプロキシ リクエスト (proxy 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に代入していることですproxyrequester値を割り当てずに呼び出す必要があります。

requester( object, callback );

コードで何が返されるかはわかりませんが、非同期関数を呼び出す場合、通常は戻り値を期待せず、渡されたパラメーターrequesterで他のすべてを処理します。callbackそのコード(リクエスタ関数)のサンプルを追加すると、物事がより明確になるでしょう:)

于 2013-01-09T18:43:37.577 に答える