Невозможно получить данные из 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 + '')
})
}