Невозможно получить данные из mongodb из результатов, используя streams/highland.js

Я новичок в потоках, и я пытаюсь получить данные из моей коллекции, используя реактивный-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 ответа

Решение

Я не совсем уверен, что reactive-superglue делает для вас здесь. Похоже, что это просто набор высокогорных ярлыков для получения ответов от разных источников данных.

Вы можете использовать высокогорье, чтобы сделать это прямо так:

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

Изменить: приведенный выше фрагмент все еще использует reactive-superglue, но вы можете просто использовать драйвер узла Монго:

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

Ваш фрагмент кода не работает, потому что.done() файла highland.js не возвращает результат. Вы должны либо использовать Stream.each для итерации каждого элемента, либо Stream.toArray, чтобы получить их все в виде массива.

Кстати, я автор реактивного суперклея. Реактивный суперклей - моя (незавершенная) работа с реальным использованием потоков высокогорья, построенных поверх highland.js.

Ура!

Я смог получить полезную нагрузку, используя этот подход, но не уверен, что это лучший способ, и буду благодарен за любые другие предложения или объяснения.

exports.findAll = function (err, res) {
    query.find()
        .map(JSON.stringify)
        .toArray(function(x){
          res.end(x + '')
        })
}
Другие вопросы по тегам