2017-04-20 65 views
1

我试图从MongoDB中加载数据到我的express,最终在我的html中使用angular来显示。现在我已经得到它的数据,但这只适用于数据库中的一条记录。如果我创建多个记录,它给在控制台以下错误:从MongoDB获取数据

“后,他们被送到不能发送头”

这是我的特快“取”请求:

router.get('/getdata', function(req, res, next){ 
var findDocuments = function(db, callback) { 
var cursor = db.collection('userdata').find({}); 
cursor.each(function(err, doc) { 
    assert.equal(err, null); 
    if (doc != null) { 
    res.status(200).json(doc); 
    } else { 
    callback(); 
    } 
}); 
}; 
    mongo.connect(url, function(err, db) { 
    assert.equal(null, err); 
    findDocuments(db, function() { 
    db.close(); 
    }); 
}); 
    console.log('Items have been returned'); 
}); 
+0

首先,我会建议使用Mongoose,它提供了非常好的附加功能来与MondoDB一起工作。创建模式后,您可以通过简单的一个mongoose方法mySchema.find(err,response)来获取所有现有的对象。并用猫鼬,你将不需要打开和关闭连接“手动” – JavaEvgen

+0

不使用循环来检查空文档,把条件放在发现像find({{key:{$ exists:true}}) –

回答

0
router.get('/getdata', function(req, res, next){ 

    var findDocuments = function(db, callback) { 

    //use such codtion that filter null/empty doc 
    //replace key with field of your doc 
    var cursor = db.collection('userdata').find({'key' : {$exists : true}}); 

    //return all docs 
    if(cursor){ 
    return callback(cursor); 
    }else{ 
    return callback([]); 
     } 

    }; 

    mongo.connect(url, function(err, db) { 
    assert.equal(null, err); 
    findDocuments(db, function(docs) { 
    db.close(); 

    //send finaly doc here 
    console.log(docs); 
    res.status(200).send(docs); 

    }); 
}); 

    console.log('Items have been returned'); 
}); 
+0

这不起作用为了我。它在控制台中返回一个错误:TypeError:将循环结构转换为JSON – Larsmanson

+0

根据文档模式或mongo驱动程序在发送或更改查找条件之前使用console.log检查文档 –