ExpressJS / Mongoose res.send()不起作用

时间:2014-10-20 12:27:27

标签: javascript node.js mongodb express

我之前有多个回调,然后我想做一个res.send()来构建JSON API:

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] },
    .... 

最后,它返回[]。

[编辑]

[完整代码]

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);
});

以下是包含一些更改的完整代码。只是有错误花哨的服务器端错误消息! 谢谢你的帮助

1 个答案:

答案 0 :(得分: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中,需要类似的工作。我已经完成了现有的功能。

编辑我的回答出错了。请立即查看。