2016-05-02 18 views
0

Derzeit kann ich eine Antwort abrufen, wenn ich auf meinem Endpunkt, aber nur einmal. Jede zusätzliche Anfrage an meinen Server löst eine stream error: Stream already being consumed, you must either fork() or observe() aus.Abfrage nicht mehr als einmal mit Streams

Mein Stapel: Knoten, Express, Highlandjs, Mongodb.

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

// mein Endpunkt Funktion

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) 
     }) 
} 

Die Serverantwort nach dem zweiten Versuch meinen Endpunkt bei Kollision: 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

Könnten Sie den Code angeben, in dem calculateTotal verwendet wird? – Stefano

Antwort

1

Nicht highland.js zu wissen, wäre meine Vermutung, dass die Fehlermeldung gibt Ihnen die Antwort, verwenden Sie beobachten statt anwenden. Möglicherweise Rückkehr

query.find() .collect() .map(function(x) { console.log(x) return _.size(x) }) und mit den Anforderer der calculateTotal Funktion, um die Rückkehr zu beachten:

calculateTotal().observe([observeFunction])

Auf diese Weise jedes Mal, wenn Sie es nennen, die Stream zurückkehren zu konsumieren. Gerade jetzt verbrauchen Sie den Stream in der Funktion. Vielleicht beschwert es sich deshalb, wenn du es noch einmal anrufst.

+0

Guter Punkt über die Tags, ich entfernte die zusätzlichen Tags. – OlliM

Verwandte Themen