2017-12-28 65 views
3

그래서 현재 요청 NPM 모듈을 사용 중입니다.NPM 요청 - 요청 본문을 반환하는 방법?

request(URL, function (error, response, body) { 
    console.log(body); 
    var bod = JSON.parse(body); 
    console.log(bod.url); 
}); 

EJS 파일 내에 bod.url 매개 변수를 사용하고 싶습니다.

console.log (bod.url) 부분은 올바르게 작동하며 찾고자하는 내용을 정확하게 출력합니다.

다음과 같이하려고합니다.

request(URL, function (error, response, body) { 
    console.log(body); 
    var bod = JSON.parse(body); 
    console.log(bod.url); 
    var bod2 = bod.url; 
}); 


res.render("image",{url:bod2}); 

하지만 bod2는 정의되지 않았다고 계속 말합니다.

bod2를 요청 함수 외부에서 변수로 만들면 내 EJS tempalte가 올바르게 렌더링합니다.

나는 근본적인 것이 빠져 있다는 것을 알고 있지만 여기서 내가 잘못 가고있는 것을 볼 수 없다.

업데이트

나는 그것이 작동 다음을 수행하십시오 ...하지만 나쁜 관행은 경로의 내부에 있다면?

request(URL, function (error, response, body) { 
    console.log(body); 
    var bod = JSON.parse(body); 
    console.log(bod.url); 
    var bod2 = bod.url; 
    res.render("image",{url:bod2});                          
}); 
+0

로 요청 블록 위에 bod2 선언 할 수 있다면 다음과 같은 요청을 할 (URL, 기능 (오류, 응답, 바디) { 을 console.log (몸) var bod = JSON.parse (body); console.log (bod.url); var bod2 = bod.url; res.render ("image", {url : bod2});}); 그것은 치료를 작동 ... 비록이 나쁜 일을하고 있지만 ... – AJSmash

+0

아니 나쁘지 않아. 귀하의 질문에 대한 답변을 게시했습니다 – Deep

답변

0

변수의 범위 때문일 수 있는데, 이는 때때로 발생하는 문제입니다. 그래서 다음 코드를 사용하여 이러한 상황을 처리 할 수 ​​있습니다.

request(URL, function (error, response, body) { 
    console.log(body); 
    var bod = JSON.parse(body); 
    console.log(bod.url); 
    var bod2 = bod.url; 
    res.render("image",{url:bod2}); 
}); 

또는 당신은 단지

var bod2; 
return new Promise(resolve => { 
    request(URL, function (error, response, body) { 
     console.log(body); 
     var bod = JSON.parse(body); 
     console.log(bod.url); 
     this.bod2 = bod.url; 

    }, function (error, response, body) { 
     if(!error) 
     resolve(body); 
    }); 
+0

정말 감사합니다! – AJSmash

+0

제발 동의하고 upvote 내 대답은 당신을 위해 작동하는 경우^_ ^ – Deep