2015-03-08 13 views
5

NodeJS में मैं इस तरह के ग्राहकों को एक धारा भेजें:कोणीय में नोडजेस स्ट्रीम कैसे पढ़ा जाए?

DockerService.get().pull('my/image', function(err, stream) { 
    if (err) { 
    return res.badRequest(err); 
    } else { 
    return stream.pipe(res); 
    } 
}); 

यह $ http.get का उपयोग कर एक AngularJS ग्राहक से शुरू हो रहा है:

pull: function() { 
    var url = ENV.apiEndpoint + '/docker/pull'; 
    var promise = $http.get(url).success(function(response) { 
    return response; 
    }).error(function(data, status) { 

    }); 
    return promise; 
} 

हालांकि मैं धारा नहीं पढ़ सकते हैं। कोणीय से मुझे एक त्रुटि संदेश मिलता है:

SyntaxError: Unexpected token { 
    at Object.parse (native) 
    at fromJson (file://build/vendor/angular/angular.js:1065:14) 
    at defaultHttpResponseTransform (file://build/vendor/angular/angular.js:8579:16) 
    at file://build/vendor/angular/angular.js:8664:12 
    at forEach (file://build/vendor/angular/angular.js:323:20) 
    at transformData (file://build/vendor/angular/angular.js:8663:3) 
    at transformResponse (file://build/vendor/angular/angular.js:9389:23) 
    at processQueue (file://build/vendor/angular/angular.js:13189:27) 
    at file://build/vendor/angular/angular.js:13205:27 
    at Scope.$get.Scope.$eval (file://build/vendor/angular/angular.js:14401:28) 

मुझे कोणीय में धाराओं को संभालने के तरीके के बारे में कोई जानकारी नहीं मिल रही है। क्या तुम मेरी मदद कर सकते हो?

हेडर:

enter image description here

पूर्वावलोकन::

enter image description here

प्रतिक्रिया यहाँ इसलिए यहाँ यह पेश करने के लिए, बहुत बड़ी है यह का पहला हिस्सा है

enter image description here

+0

का उपयोग करता है आप HTTP हेडर और शरीर कि आपके सर्वर कोड लौटा रहा है दिखा सकते हैं? मेरा अनुमान है कि आपने एप्लिकेशन/जेसन के लिए 'सामग्री-प्रकार' शीर्षलेख का मिलान किया है, लेकिन 'badRequest (err)' से एक सादा पाठ संदेश निकाय है। –

+0

@ पीटर लाइन्स अनुरोध प्राप्त करें 200 200 ठीक है। क्रोम के नेटवर्क टैब में मैं पाइप प्रतिक्रिया देख सकता हूं। हालांकि कोणीय में त्रुटि कॉलबैक ट्रिगर किया जाता है। प्रतिक्रिया जेएसओएन प्रकार है। BadRequest बिल्कुल नहीं कहा जाता है। –

+0

यहां देखें यदि यह आपके लिए http: // stackoverflow काम करता है।कॉम/प्रश्न/26300350/हैंडलिंग-नोडजेस-स्ट्रीम-साथ-कोणीय –

उत्तर

4

तो यह वैध JSON नहीं है, यह न्यूलाइन-सीमित (संभवतः) JSON संदेशों की एक श्रृंखला है। यही है कि "अप्रत्याशित टोकन" {'"का अर्थ है। कोणीय का अंतर्निर्मित पार्सर बॉक्स के बाहर इसका समर्थन नहीं करता है। प्रश्न वास्तव में स्ट्रीमिंग बनाम buffered डेटा के बारे में नहीं है, यह सिर्फ एक शरीर प्रारूप angularjs सीधे समर्थन नहीं करता है। आपको यह सुनिश्चित करने की आवश्यकता होगी कि कोणीय के अंतर्निर्मित पार्सर को बाईपास किया गया है और फिर आप स्ट्रिंग को नई लाइन पर विभाजित कर सकते हैं और JSON ऑब्जेक्ट के रूप में प्रत्येक पंक्ति को पार्स करने का प्रयास कर सकते हैं।

मेरे ज्ञान के लिए FYI ब्राउज़र में स्ट्रीमिंग के लिए सबसे अच्छा मॉड्यूल oboe.js है। आप प्रत्येक पंक्ति को बफर करने के लिए कुछ कोड के साथ RonB/angular-oboe का उपयोग करने में सक्षम हो सकते हैं, फिर जेएस ऑब्जेक्ट्स की स्ट्रीम में ndjson वाक्यविन्यास को पार्स करें।

1

जोड़ने का प्रयास:

res.attachment() 

या

res.writeHead(200, {'Content-Type': data.ContentType }); 

शायद समस्या है ...

अपने कोड में

कहीं भी होगी इस तरह दिखता है:

DockerService.get().pull('my/image', function(err, stream) { 
    if (err) { 
    return res.badRequest(err); 
    } else { 
    res.attachment('your_file.jpg'); // add file name here like req.files.name 
    return stream.pipe(res); 
    } 
}); 

या

DockerService.get().pull('my/image', function(err, stream) { 
    if (err) { 
    return res.badRequest(err); 
    } else { 
    res.writeHead(200, {'Content-Type': data.ContentType }); //switch data.ContentType to yours or get it from the file 
    return stream.pipe(res); 
    } 
}); 

कभी कभी, का उपयोग res.attachment अच्छा विचार है क्योंकि यह सही हेडर

संबंधित मुद्दे