无法使用流查询多次

时间:2016-05-02 05:02:01

标签: node.js stream highland.js

目前我可以在卷曲到我的端点时检索响应,但只能检索一次。对我的服务器的任何其他请求都会触发stream error: Stream already being consumed, you must either fork() or observe()

我的堆栈:node,express,highlandjs,mongodb。

//server.js     
app.get('/queries', query.calculateTotal);

//我的端点函数

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

exports.calculateTotal = function (err, res) {
    query.find()
        .collect()
        .map(function(x) {
            console.log(x)
            return _.size(x)
        })
        .apply(function(x) {
            return res.status(200).json(x)
        })
}

第二次尝试点击我的终端后的服务器响应:curl -i -X GET http://localhost:3000/queries/

GET /queries/ 200 34.442 ms - 632
GET /queries/ - - ms - -
GET /queries/ 500 2.371 ms - 1998
Error: Stream already being consumed, you must either fork() or observe()
    at Stream._addConsumer 

1 个答案:

答案 0 :(得分:1)

不知道highland.js,我的猜测是错误消息给你答案,使用observe而不是apply。可能会回来

query.find() .collect() .map(function(x) { console.log(x) return _.size(x) }) 并让calculateTotal函数的请求者观察返回:

calculateTotal().observe([observeFunction])

这种方式每次调用它时,都会返回要使用的流。现在你正在使用函数中的流。也许这就是为什么当你再次打电话时它会抱怨。