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