Я пытаюсь создать слабое приложение и настроить его правильно. Мне нужно выполнить последовательный запрос Https. Я использую методы callbacks для его обработки, первый вызывает второй без проблем, но затем третий никогда не запускается, и моя программа застревает. Вот мой код:Как обрабатывать последовательный запрос https в узле JS?
//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);
});
Это объясняет, почему оно пытается выполнить мой код. Не удается GET/redirect /? Code = & state = Как определить все обработчики маршрутов на верхнем уровне? –
ghosteins
Просто переместите строку 'app.get ('/ redirect /', oauthFlow)' изнутри обработчика на верхний уровень после 'app.get ('/', boutonSlack);' например. – pspi