2014-10-20 113 views
-1

我以前多次回調,然後我想做一個res.send()來構建JSON API:ExpressJS /貓鼬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] }, 
    .... 

最後,它返回[]。

[編輯]

[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 2014-10-20 12:33:06

+0

它應該返回一個JSON,但它返回一個空數組[]。如果我做一些簡單的事情,res.send()可以工作。但是,當我在函數中使用函數時,我認爲存在一些錯誤。 – Jose 2014-10-20 12:34:39

+0

你搞砸了。你的findIdPages函數在哪裏?它在做什麼? – Jarema 2014-10-20 12:52:02

回答

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 2014-10-20 14:49:59

+0

做了這一行: console.log(「TAGS:」+ response); 輸出正確的數據? – Jarema 2014-10-20 15:42:40

+0

是的,我收到了數據。但它不起作用res.send(response);我認爲這是因爲for(i = 0; i Jose 2014-10-20 16:12:31