如何在angular中读取nodejs流?

时间:2015-03-08 17:27:36

标签: angularjs node.js

在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

1 个答案:

答案 0 :(得分:4)

因此,它不是有效的JSON,它是一系列换行符(可能是)JSON消息。那是"意想不到的令牌' {'"手段。 Angular的内置解析器并不支持开箱即用。问题并不是关于流媒体与缓冲数据的关系,它只是一种不直接支持的体格式。您需要确保绕过角度的内置解析器,然后您可以在换行符上拆分字符串并尝试/捕获将每一行解析为JSON对象。

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