2016-08-22 2 views
0

나는 봇 (bot)으로 느슨한 응용 프로그램을 만들려고 노력하고 있으므로 여러 콜백 기능을 수행해야하지만 세 번째 응용 프로그램을 시작하지는 못했습니다. 첫 번째 두 작품은 잘 작동하지만 마지막 작품은 시작되지 않으며 이유를 모르겠습니다. 나는 익스프레스를 사용하고있다.표현식이있는 노드 js에서 연속 콜백 함수를 수행하는 방법은 무엇입니까?

var app = express(); 
 
app.use(bodyParser()); 
 

 
var port = process.env.PORT || 5000; 
 

 

 
//Fonctions de Callback 
 
boutonSlack = function(req, res,next) { //Show the slack button to install the app 
 
    res.send('<a href="https://slack.com/oauth/authorize?scope=bot,incoming-webhook,commands,' 
 
                 +'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/',recupCode); 
 
}; 
 

 
recupCode = function(req, res, next){//get the code parameter to perform the oauth process 
 
    console.log(req.query.code); 
 
    process.env.CODE = req.query.code; 
 
    console.log('cb1 : le code est récupéré'); 
 
    res.send('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); 
 
      console.log(JSON.stringify(result)); 
 
      process.env.SLACKTOKEN = result.access_token; 
 
      process.env.SLACK_BOT_TOKEN = result.bot.bot_access_token; 
 
     }); 
 
    }); 
 
    console.log(process.env.SLACKTOKEN); 
 
    console.log(process.env.SLACK_BOT_TOKEN); 
 
    console.log('cb2 : le token est récupéré') 
 
    next(); 
 
    app.get('/',ouvertureWebsocket); 
 
}; 
 

 
ouvertureWebsocket = function (req, res, next) {//perform the rtm.start slack method to open the websocket 
 
    console.log('cb3 : ouverture du web socket'); 
 
    res.send('cb3 : ouverture du websocket'); 
 
    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)); 
 
     }); 
 
    }); 
 
    res.end(); 
 
} 
 

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

답변

0

내가 nodejs

귀하의 경우에는

에서 작동하는 방법 비동기 코드에 더 파고를 권 해드립니다, 당신은

를 배치해야합니다 : 여기

내 코드입니다
console.log(process.env.SLACKTOKEN); 
console.log(process.env.SLACK_BOT_TOKEN); 
console.log('cb2 : le token est récupéré') 
next(); 
app.get('/',ouvertureWebsocket); 

내부 https.get('https://slack.com/api/rtm.start?token... 데이터 콜백 당신이 설명했듯이

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) => { 
     // THIS CODE IS EXECUTED when HTTPS request from slack has finished 
     var result = JSON.parse(chunk); 
     console.log(JSON.stringify(result)); 
     process.env.SLACKTOKEN = result.access_token; 
     process.env.SLACK_BOT_TOKEN = result.bot.bot_access_token; 
     console.log(process.env.SLACKTOKEN); 
     console.log(process.env.SLACK_BOT_TOKEN); 
     console.log('cb2 : le token est récupéré') 
     next(); 
     app.get('/',ouvertureWebsocket); 
    }); 
}); 
+0

내 코드의 업데이트를 넣어. – ghosteins

0

나는 내 코드를 수정 한 내가 비동기 코드 및 노드 JS와 콜백 사용에 빨간색했지만으로 세 번째 콜백 기능은 아직 시작되지 않습니다 : 여기 내 코드는 지금 : 내가 아래에 대답 한

var app = express(); 
 
app.use(bodyParser()); 
 

 
var port = process.env.PORT || 5000; 
 

 

 
//Fonctions de Callback 
 
boutonSlack = function(req, res,next) { //Show the slack button to install the app 
 
    res.send('<a href="https://slack.com/oauth/authorize?scope=bot,incoming-webhook,commands&client_id='+process.env.CLIENT_ID+'">' 
 
                 +'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/',recupCode); 
 
}; 
 

 
recupCode = function(req, res, next){//get the code parameter to perform the oauth process 
 
    console.log(req.query.code); 
 
    process.env.CODE = req.query.code; 
 
    console.log('cb1 : le code est récupéré'); 
 
    res.send('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); 
 
      console.log(JSON.stringify(result)); 
 
      console.log(result.bot.bot_access_token); 
 
      process.env.SLACK_BOT_TOKEN = result.bot.bot_access_token; 
 
      console.log(process.env.SLACKTOKEN); 
 
      console.log(process.env.SLACK_BOT_TOKEN); 
 
      console.log('cb2 : le token est récupéré') 
 
      next(); 
 
      app.get('/websocket/',ouvertureWebsocket); 
 
     }); 
 
    }); 
 
}; 
 

 
ouvertureWebsocket = function (req, res, next) {//perform the rtm.start slack method to open the websocket 
 
    console.log('cb3 : ouverture du web socket'); 
 
    res.send('cb3 : ouverture du websocket'); 
 
    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)); 
 
      next(); 
 
      app.post('/running/',[bot.botFunction,conges.execute]); 
 
     }); 
 
    }); 
 
    res.end(); 
 
} 
 

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

관련 문제