0

現在、エンドポイントにカールしたときに応答を取得できますが、1 回だけです。私のサーバーへの追加のリクエストは、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)
        })
}

エンドポイントに到達するための 2 回目の試行後のサーバーの応答: 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 
4

1 に答える 1

1

highland.js がわからないので、エラー メッセージが答えを示していると思います。適用ではなく監視を使用してください。おそらく戻ってくる

query.find() .collect() .map(function(x) { console.log(x) return _.size(x) }) そして、calculateTotal 関数のリクエスタにリターンを観察させます。

calculateTotal().observe([observeFunction])

このようにして、呼び出すたびに、消費するストリームを返します。現在、関数でストリームを使用しています。たぶんそれが、もう一度呼び出すときに不平を言っている理由です。

于 2016-05-03T20:28:58.813 に答える