Node.JS HTTP响应没有返回?

时间:2012-10-23 08:31:14

标签: javascript node.js mongodb

我试图遍历MongoDB游标对象并从集合中返回所有记录,然后使用Node outout中的response方法返回浏览器。

我遇到的问题似乎没有得到回应。

我已经尝试将response.end()放在循环中,但它不会遍历结果。

我在不同的地方尝试过response.end()。这是代码

db.open(function(err, db) {
            if(!err) {
                console.log("Nodelistr is connected to MongoDB\n");
                response.writeHead(200);

                db.collection('todo', function(err, collection){            
                    collection.find(function(err, cursor) {
                        cursor.each(function(err, doc) {
                            for(docs in doc){
                                if(docs == "_id"){
                                }else{
                                    var test = docs + " : " + doc[docs];
                                }
                            }
                            data = data.toString("utf8").replace("{{TEST}}", test);
                            response.write(data);

                            //console.dir(doc);
                        })           
                        response.end();         
                    });
                });

            };

        });

1 个答案:

答案 0 :(得分:0)

我无法弄清楚你在尝试使用未初始化的data变量以及迭代它们时的文档,但一般的问题是你需要等待调用{{1}直到你到达光标的末尾。这表示response.end();doc回调中为cursor.each

代码的中间部分应遵循以下一般方法:

db.collection('todo', function(err, collection){            
    collection.find(function(err, cursor) {
        cursor.each(function(err, doc) {
            if (doc) {
                ...  // initialize data from doc
                response.write(data);
            } else {
                // doc is null, so the cursor is exhausted
                response.end();         
            }
        })           
    });
});