目前我可以在卷曲到我的端点时检索响应,但只能检索一次。对我的服务器的任何其他请求都会触发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
答案 0 :(得分:1)
不知道highland.js,我的猜测是错误消息给你答案,使用observe而不是apply。可能会回来
query.find()
.collect()
.map(function(x) {
console.log(x)
return _.size(x)
})
并让calculateTotal函数的请求者观察返回:
calculateTotal().observe([observeFunction])
这种方式每次调用它时,都会返回要使用的流。现在你正在使用函数中的流。也许这就是为什么当你再次打电话时它会抱怨。