无法使用streams / highland.js从结果中获取mongodb中的数据

时间:2016-04-29 18:45:36

标签: javascript node.js mongodb rest highland.js

我是Stream的新手,我正在尝试使用reactive-superglue / highland.js(https://github.com/santillaner/reactive-superglue)从我的集合中获取数据。

var sg = require("reactive-superglue")
var query = sg.mongodb("mongodb://localhost:27017/qatrackerdb").collection("test1")

exports.findAll = function (err, res) {
    query.find()
        .map(JSON.stringify)
        .done(function(data) {
            console.log(data)
            res.end(data)
        })
}

我的卷曲请求:

curl -i -X GET http://localhost:3000/queries/

3 个答案:

答案 0 :(得分:1)

您的代码段不起作用,因为highland.js的.done()不会返回结果。您应该使用Stream.each迭代每个元素,或者使用Stream.toArray将它们全部作为数组。

顺便说一下,我是反应性强力胶水的作者。反应性强胶水是我(正在进行中)对高地溪流的真实使用,建立在高地之上.js

干杯!

答案 1 :(得分:0)

我能够使用这种方法检索有效载荷,不确定这是否是最佳方式,非常感谢任何其他建议或解释。

exports.findAll = function (err, res) {
    query.find()
        .map(JSON.stringify)
        .toArray(function(x){
          res.end(x + '')
        })
}

答案 2 :(得分:0)

我不确定reactive-superglue在这里为你做了什么。看起来它只是汇集高地快捷键,以便让不同的数据源做出响应。

您可以使用highland直接执行此操作:

var collection = sg.mongodb("mongodb://localhost:27017/qatrackerdb").collection("test1");
return h( collection.find({}) )
    .map(h.extend({foo: "bar"})
    .pipe(res);

编辑: 上面的代码段仍然使用reactive-superglue,但您可以使用节点mongo驱动程序:

var url = 'mongodb://localhost:27017/qatrackerdb';
MongoClient.connect(url, function(err, db) {
  h( db.collection("test1").find({}) )
    .map(h.extend({foo: "bar"})
    .pipe(res);
});