2015-10-14 38 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'); 
     }); 

    }); 
});