【问题标题】:How to handle successive https request in node JS?如何在节点 JS 中处理连续的 https 请求?
【发布时间】:2016-08-24 20:22:09
【问题描述】:

我正在尝试构建一个 slack 应用程序并正确配置它,我需要执行连续的 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/add_to_slack@2x.png 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);
});

【问题讨论】:

    标签: node.js oauth callback slack asynccallback


    【解决方案1】:

    这引起了怀疑:

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

    并不是代码行有什么问题,只是它在'/' 路由的处理程序中。通常你会在顶层定义所有路由处理程序,而不是在任何处理程序中。

    【讨论】:

    • 这可以解释为什么它发现它试图执行我的代码。无法 GET /redirect/?code=&state= 如何在顶层定义所有路由处理程序?
    • 例如,只需将app.get('/redirect/',oauthFlow); 行从处理程序内部移动到app.get('/',boutonSlack); 之后的顶层即可。
    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多