2016-05-02 6 views
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) 
     }) 
} 

サーバーの応答私のエンドポイントを打つにおける第二の試行後: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

calculateTotalが使用されているコードのビットを教えてください。 – Stefano

答えて

1

highland.jsを知らない、私の推測では、ということでしょうエラーメッセージがあなたに答えを与えているので、applyの代わりにobserveを使用してください。おそらく

query.find() .collect() .map(function(x) { console.log(x) return _.size(x) }) を返すとcalculateTotal機能の要求者がリターンを守った:

calculateTotal().observe([observeFunction])

この方法で、あなたはそれを呼び出すたびに、あなたが消費するストリームを戻ってきています。今は関数内でストリームを消費しています。たぶんそれはあなたがもう一度それを呼び出すときに不平を言っている理由です。

+0

タグについての良い点、私は余分なタグを削除しました。 – OlliM

関連する問題