2014-10-20 155 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