如何读取angular度的nodejsstream?

在nodejs中,我向这样的客户端发送一个stream:

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

但是我无法读取stream。 从angular度来看,我收到一条错误消息:

 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) 

我找不到有关如何处理angular度stream的任何信息。 你能帮我吗?

头:

在这里输入图像描述

这个回应太大,不能在这里介绍,所以这里是第一部分:

在这里输入图像描述

预习:

在这里输入图像描述

所以这不是有效的JSON,它是一系列以换行符分隔(假定)的JSON消息。 这就是“意外标记”{“”的意思。 Angular的内置parsing器不支持开箱即用。 这个问题并不是关于stream与缓冲数据的关系,它只是angularjs不直接支持的主体格式。 您需要确保angular的内置parsing器被绕过,然后您可以将该string拆分为新行,并尝试/ catch将每行parsing为JSON对象。

仅供参考,据我所知,stream入浏览器的最佳模块是oboe.js。 您可以使用RonB / angular-oboe加上一些代码来缓冲每一行,然后将ndjson语法parsing成JS对象stream。

尝试添加:

 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是好主意,因为它使用正确的标题