2016-08-24 11 views
0

私は余裕のあるアプリケーションを構築しようとしており、正しく設定するためには、連続してHttpsをリクエストする必要があります。私はそれを処理するためにコールバックメソッドを使用します。最初の呼び出しは問題なく2番目の呼び出しを呼び出しますが、3番目は決して起動せず、プログラムがスタックします。ここ は私のコードです:ノードJSで連続したhttps要求を処理する方法は?

//CREATE THE app OBJECT 
 
//--------------------- 
 

 
var app = express(); 
 
app.use(bodyParser()); 
 
var port = process.env.PORT || 5000; 
 

 

 

 
//CALLBACK FUNCTIONS 
 
//------------------ 
 

 
// USE THE SLACK BUTTON TO CREATE THE APP 
 
boutonSlack = function(req, res,next) { 
 
    res.send('<a href="https://slack.com/oauth/authorize?scope=bot,incoming-webhook,commands&client_id='+process.env.CLIENT_ID+'">' 
 
       +'<img alt="Add to Slack" height="40" width="139"' 
 
       +'src="https://platform.slack-edge.com/img/add_to_slack.png" ' 
 
       +'srcset="https://platform.slack-edge.com/img/add_to_slack.png 1x, ' 
 
       +'https://platform.slack-edge.com/img/[email protected] 2x" /></a>'); 
 
    console.log('cb0:le bouton slack s\'affiche'); 
 
    next(); 
 
    app.get('/redirect/',oauthFlow); 
 
}; 
 

 

 
//GET THE CODE PARAMETER AND PERFORM THE OAUTH FLOW 
 
oauthFlow = function(req, res, next){ 
 
    process.env.CODE = req.query.code; 
 
    console.log('cb1 : le code est récupéré'); 
 
    https.get('https://slack.com/api/oauth.access?client_id='+process.env.CLIENT_ID+'&client_secret='+process.env.CLIENT_SECRET+'&code='+process.env.CODE, (res) => { 
 
     res.on('data', (chunk) => { 
 
      var result = JSON.parse(chunk); 
 
      process.env.SLACKTOKEN = result.access_token; 
 
      process.env.SLACK_BOT_TOKEN = result.bot.bot_access_token; 
 
      console.log('cb2 : le token est récupéré') 
 
      next(); 
 
      app.get('/websocket/',ouvertureWebsocket); 
 
     }); 
 
    }); 
 
}; 
 

 

 
//THIS CALLBACK NEVER STARTS 
 
//PERFORM THE rtm.slack METHOD 
 
ouvertureWebsocket = function (req, res, next) { 
 
    console.log("working"); 
 
    https.get('https://slack.com/api/rtm.start?token='+process.env.SLACK_BOT_TOKEN, (res) => { 
 
     res.on('data', (chunk) => { 
 
      var result = JSON.parse(chunk); 
 
      console.log(JSON.stringify(result)); 
 
      console.log('cb3 : ouverture du web socket'); 
 
      next(); 
 
     }); 
 
    }); 
 
    res.end(); 
 
} 
 

 

 

 
//RUN THE CALLBACK FUNCTIONS 
 
//-------------------------- 
 

 
app.get('/',boutonSlack); 
 
app.listen(port, function() { 
 
    console.log('Ready, listenning port '+port); 
 
});

答えて

0

これが疑惑を提起:

app.get('/redirect/',oauthFlow); 

それがコード行に何かをtheresのない、それは'/'のためだけにそのハンドラ内ということですルート。通常は、すべてのルートハンドラを最上位レベルで定義し、ハンドラではそれ以上は定義しません。

+0

これは、なぜ私のコードを実行しようとしているのかを説明するでしょう。 GET/redirect /?code = &state = トップレベルですべてのルートハンドラを定義するにはどうすればよいですか? – ghosteins

+0

'app.get( '/ redirect /'、oauthFlow);'行を 'app.get( '/'、boutonSlack);の後にハンドラの内側からトップレベルに移動するだけです。 – pspi

関連する問題