2014-10-20 1 views
-1

작동하지 않습니다 내가 가진 로그에서ExpressJS() 내가 전에 여러 콜백이 다음 내가 JSON API를 구축하기 위해 res.send을()하고 싶은

app.get('/api', function (req, res){ 
... 
     function logPagesId() { 
      console.log("load: " +pagesId); 
      console.log("lenght: " +pagesId.length); 
      findWords(logWords); 
     } 

     function logWords() { 
      console.log("TAGS: "+wordsArray); 
      return res.send(wordsArray); 
     } 

    findIdPages(logPagesId); 
} 

을 :

Successfully connected to MongoDB 
load: 45678bdhbdns768,45678bdhbdns765 
lenght: 2 
TAGS: 
{ _id: 45678bdhbdns765, 
    result: 
    { ID1: { Pages: [Object], Name: [Object] }, 
    ID2: { Pages: [Object], Name: [Object] }, 
    .... 

결국 []을 반환합니다.

[EDIT]

[FULL CODE 여기서

app.get('/tags/reference/:reference', function (req, res){ 
    var articlesId = []; 
    var tagsArray = []; 
    function findIdArticles(callback) { 
     Articles.find({reference: req.params.reference}, '_id' , function (err, articles) { 
     if (!err) { 
     for (var i = 0; i < articles.length; i++) { 
      articlesId.push(articles[i]._id); 
     } 
     for (i=0 ; i < articlesId.length; i++){ 
      Extract_Tags.findById(articlesId[i], function (err, tags) { 
      if (!err) { 
       tagsArray.push(tags); 
       console.log(tags); 
       callback(null, tagsArray); 
      } else { 
       callback(err); 
      } 
      }); 
     } 

    } else { 
     callback(err); 
    } 
    }); 
    } 

    function logArticlesId(err, response) { 
     res.status(503).send('fancy server side error message!'); 
     console.log("load: " +articlesId); 
     console.log("tagsArray: " +tagsArray); 
     console.log("response: " +response); 
     logTags(response); 
    } 

    function logTags(response) { 
     console.log("TAGS: "+response); 
     res.send(response); 

    } 

findIdArticles(logArticlesId); 
}); 

일부 변경 전체 코드이다. 그냥 오류가 멋진 서버 쪽 오류 메시지가! 감사합니다.

+0

예상대로 작동하지 않는 기능은 무엇입니까? 문제를 해결하기 위해 무엇을 시도 했습니까? 어떤 익스프레스 버전을 사용하고 있습니까? 던진 오류는 무엇입니까? 매우 많은 질문, 너무 적은 정보. -1 – Sprottenwels

+0

JSON을 반환하지만 빈 배열 []을 반환합니다. 내가 간단한 것을하면 res.send()가 작동한다. 그러나 함수에서 함수를 사용할 때 나는 잘못 생각하고 있다고 생각합니다. – Jose

+0

당신이 엉망이되었습니다. FindIdPages 함수는 어디에 있고 무엇을합니까? – Jarema

답변

0

우선, 오류가 있어도 콜백 함수는 항상 반환해야합니다. 그렇지 않으면 오류 시나리오의 콜백 함수가 호출되지 않습니다! 그 실수가 해결 될 때

그래서, findIdArticles() 둘째

function findIdArticles(callback) { 
     Articles.find({folder: req.params.folder}, '_id' , function (err, articles) { 
     if (!err) { 
     for (var i = 0; i < articles.length; i++) { 
     pagesId.push(pages[i]._id); 
     } 
     callback(null, pagesId); 
    } else { 
     callback(err); 
    } 
    }); 
    } 

당신은 findIdPages를 호출하고 당신은 우리에게

findIdArticles을 보여, 귀하의 app.get는 다음과 같이한다 :

app.get('/api', function (req, res){ 
... 
     function logPagesId(err, response) { 
      // deal with errors, for ie: 
      if (err) { 
       res.status(503).send('fancy server side error message!'); 
       return; 
      } 


      console.log("load: " +response); 
      console.log("lenght: " +response.length); 
      findWords(response); 
     } 

     function logWords() { 
      console.log("TAGS: "+wordsArray); 
      return res.send(wordsArray); 
     } 

    findIdPages(logPagesId); 
} 

하지만 여전히 도움이되지 않을 것입니다. 여기서 logWords를 부르지 마십시오. 나는 findWords에서 유사한 작업이 필요한 것으로 생각합니다. 기존 기능에 대한 작업을 완료했습니다.

편집 내 대답에 오류가있었습니다. 지금 확인하십시오.

+0

도움 주셔서 감사합니다. 변경 사항으로 코드를 편집했지만 오류가 발생했습니다. 감사! – Jose

+0

이 줄 않습니다 : console.log ("TAGS :"+ response); 올바른 데이터를 출력 하시겠습니까? – Jarema

+0

예, 데이터가 응답되었습니다. 하지만 res.send (response)는 작동하지 않습니다. 나는 그것 때문에 생각한다 (i = 0; i Jose

관련 문제