Angularjs 如何以角度读取nodejs流?

Angularjs 如何以角度读取nodejs流?,angularjs,node.js,Angularjs,Node.js,在nodejs中,我向客户端发送流,如下所示: DockerService.get().pull('my/image', function(err, stream) { if (err) { return res.badRequest(err); } else { return stream.pipe(res); } }); DockerService.get().pull('my/image', function(err, stream) { if (err)

在nodejs中,我向客户端发送流,如下所示:

DockerService.get().pull('my/image', function(err, stream) {
  if (err) {
    return res.badRequest(err);
  } else {
    return stream.pipe(res);
  }
});
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);
  }
});
这是使用$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)
我找不到任何关于如何在angular中处理流的信息。你能帮我吗

标题:

响应太大,无法在此处显示,因此这里是响应的第一部分:

预览:


所以这不是有效的JSON,它是一系列新行分隔(大概)的JSON消息。这就是“意外标记”{“意思是。Angular的内置解析器不支持这种开箱即用的方式。问题并不是流式数据与缓冲数据,它只是angularjs不直接支持的一种正文格式。你需要确保Angular的内置解析器被绕过,然后你可以在newline上拆分字符串,并尝试/捕获将每一行作为JSON对象进行解析。

仅供参考,据我所知,流式传输到浏览器的最佳模块是。您可以使用一些代码来缓冲每一行,然后将ndjson语法解析为JS对象流。

尝试添加:

res.attachment()

也许问题就在那里

在您的代码中,它将如下所示:

DockerService.get().pull('my/image', function(err, stream) {
  if (err) {
    return res.badRequest(err);
  } else {
    return stream.pipe(res);
  }
});
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);
  }
});


有时使用res.attachment是个好主意,因为它使用了正确的头文件

您能显示服务器代码返回的HTTP头文件和正文吗?我猜您的应用程序/json的“内容类型”头文件不匹配,但是来自
badRequest的纯文本消息正文(错误)
@PeterLyons get请求本身返回200 OK。在chrome的网络选项卡中,我可以看到管道响应。但是,在angular中,错误回调被触发。响应类型为JSON。根本不调用badRequest。请参见此处,它是否适用于您(真的)您可以显示服务器代码正在运行的HTTP头和正文吗?这就是我/我们可能能够帮助您的方式。将代码片段与原始HTTP数据一起放入问题中,而不是其英文描述。然后我们可以进行故障排除。很明显,响应正文不是有效的json,因此如果这是分块编码问题,我们需要进行故障排除什么。@PeterLyons好的,我用标题和回答更新了我的问题。