2017-02-11 11 views
1

requestcheerio을 사용하여 게시 매개 변수의 링크에서 각 동영상의 src를 가져 오려고합니다.각 루프마다 요청 URL을 어떻게 변경합니까?

각 동영상의 src를 가져 오려면 루프마다 요청 옵션의 url을 변경해야합니다. 하지만 아래의 코드와 같은 src를 얻으려고하면 url을 변경하는 것이 요청보다 빠르기 때문에 요청이 변경되기 전에 url을 변경해야합니다. 내가 원하는 것을 구현하기 위해 무엇을 할 수 있습니까?

여기에 코드를입니다

let opt = { 
    transform: function(body) { 
     return cheerio.load(body); 
    } 
}; 

router.post('/api', function(req, res) { 
    let idArray = req.body.data; 
    for(var i=0; i<idArray.length; i++) { 
     opt.uri = baseURL + idArray[i]; 

     request(opt) 
      .then(function($) { 
       console.log($('video').src); 
      } 

로그 (그것은 인쇄 같은 일) https://example.mp4/asdfasdf https://example.mp4/asdfasdf

편집

이 코드를 사용할 때, 나는 [I]

idArray에서 정의되지 않은 얻을
for(var i=0; i<idArray.length; i++) { 
     console.log("Before", baseURL + idArray[i]) 
     rpap(baseURL + idArray[i]) 
      .then(function($) { 
       console.log(idArray); 
       console.log("After", baseURL + idArray[i]); 
} 

로그

before http://example.com/adsfasdf 
before http://example.com/famvvasd 
after http://example.com/undefined 
after http://example.com/undefined 

답변

0

이유는 바로 글로벌 옵션을 사용하여 새 URI 개체를 병합하지? 여러 요청을 할 수 있고 예상치 못한 방식으로 소품을 변경할 수 있으므로 글로벌 옵션 개체를 변경하는 것에 대한 조언을드립니다.

for (var i = 0; i < idArray.length; i++) { 
    let uri = baseURL + idArray[i]; 

    request({ 
     ...opt, 
     uri // expands to uri: uri as per es6 style 
    }) 
    .then(function($) { 
     console.log($('video').src); 
    }) 
} 

또한 변환 옵션을 항상 사용하는 경우 기본값으로 설정할 수 있습니다. request-promise가 있으면 다음과 같이 보일 것입니다. (자신의 문서에서) :

var rpap = rp.defaults({ transform: autoParse }); 

rpap('http://google.com') 
    .then(function (autoParsedBody) { 
     // :) 
    }); 

rpap('http://echojs.com') 
    .then(function (autoParsedBody) { 
     // =) 
    }); 
+0

그 코드가 의미하는 것 ... "opt, uri"를 얻지 못합니까? –

+0

@PhillipYS 이것은 [ES6 소멸 할당] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)의 일부입니다. 기본적으로'... opt'는'opt' 안에있는 모든 속성들을 그것이 쓰여진 객체로 확장합니다. '{uri}'는 유효한 ES6이며'{uri : uri} '와 같은 의미입니다. 따라서 처리 된 코드는'request ({transform : function() {...}, uri : uri})'와 유사합니다. –