2015-10-14 88 views
0

我試圖運行此代碼:節點不在請求中執行請求嗎?

app.delete('/closeTrelloBoard', function (req, res) { 
    console.log('[data], [...]'); 
    var options = { 
     method: 'GET', 
     url: 'https://api.trello.com/1/members/someId/boards?key=KEY&token=TOKEN' 
    }; 

    request(options, function (error, body) { 
     var boards = JSON.parse(body.body); 

     for (var i=0; i<boards.length; i++) { 
      console.log(boards[i].id); //This line runs 
      app.put('/closeTrelloBoard',function (req, res) { 

       var options = { 
        method: 'PUT', 
        url: 'https://api.trello.com/1/boards/'+boards[i].id+'/closed?key=KEY&token=TOKEN&value=true', 
       }; 

       request(options, function (error,body) { 
        console.log('Board closed'); //But this line not runs 
       }); 
      }); 
     }; 

    }); 
}); 

在上面的代碼我曾試圖彌補在其他要求回調的請求。問題是第一個請求給了我適當的迴應,但第二個請求沒有給我任何輸出。

請指導我爲什麼第二個請求沒有運行。

回答

0

您的第二個請求在回調方法中設置爲app.put()方法。這意味着只有在調用/closeTrelloBoard路由時纔會觸發該請求(在回調中設置路由以請求更糟糕 - 在循環中似乎不是邏輯)。因此,爲了在首次完成後運行第二個請求,請在app.put()方法之前調用它。我不知道你的意圖,我可能會誤解,但我想app.put()應該設置在代碼的其他部分。

app.delete('/closeTrelloBoard', function (req, res) { 
console.log('[data], [...]'); 
var options = { 
    method: 'GET', 
    url: 'https://api.trello.com/1/members/someId/boards?key=KEY&token=TOKEN' 
}; 

request(options, function (error, body) { 
    var boards = JSON.parse(body.body); 

    for (var i=0; i<boards.length; i++) { 
     console.log(boards[i].id); //This line runs 
     var options = { 
      method: 'PUT', 
      url: 'https://api.trello.com/1/boards/'+boards[i].id+'/closed?key=KEY&token=TOKEN&value=true', 
     }; 

     request(options, function (error,body) { 
      console.log('Board closed'); //But this line not runs 
     }); 

    }; 
    app.put('/closeTrelloBoard',function (req, res) { 


    }); 
}); 

}); 
0

好了,所以,我真的不明白你正在嘗試做的......對標籤,我可以看到你正在使用ExpressJS,因此「應用」是他的主要價值中的約定..

現在,我可以從代碼中讀取的是: 您正在向「/ closeTrelloBoard」註冊一個「DELETE」方法,然後創建一個名爲「options」的對象以傳遞給請求,而您請求...好吧,現在你從請求的主體解析de JSON並且......做一個循環來發出請求......好吧,這是我看到的第一個,試着使用Callbacks而不是循環,因爲是節點的力量。我們繼續吧。現在......我不明白,你正在註冊「/ closeTrelloBoard」的「PUT」方法......我想這不是必須在那裏......然後你提出Loop的請求。讓我們看看這是否可以工作,這應該是「NodeJS方式」,如果你有懷疑只問他們:)我不記得這個回調方法是如何被調用的,但是我記得他們有它自己的名稱,我也沒有嘗試過,所以...它不能工作:

app.delete('/closeTrelloBoard', function (req, res) { 
    console.log('[data], [...]'); 
    var options = { 
     method: 'GET', 
     url: 'https://api.trello.com/1/members/someId/boards?key=KEY&token=TOKEN' 
    }; 

    request(options, function (error, body) { 
     var boards = JSON.parse(body.body); 

     loopEveryBoard = function(i, next){ 
      if (i >= boards.length){ 
       next() 
      } else { 
       var options = { 
        method: 'PUT', 
        url: 'https://api.trello.com/1/boards/'+boards[i].id+'/closed?key=KEY&token=TOKEN&value=true', 
       }; 

       request(options, function (error,body) { 
        console.log('Board ' + i + ' closed'); //But this line not runs 
        loopEveryBoard(++i, next); // The ++ has to be on the left to make it effective before the function takes the value 
       }); 
      } 
     } 

     loopEveryBoard(0, function(){ 
      console.log('Every board closed'); 
     }); 

    }); 
});