【发布时间】:2015-03-08 17:27:36
【问题描述】:
在 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)
我找不到有关如何以角度处理流的任何信息。你能帮帮我吗?
标题:
响应太大,这里无法呈现,所以这里是它的第一部分:
预览:
【问题讨论】:
-
您能否显示您的服务器代码返回的 HTTP 标头和正文?我的猜测是您的 application/json 的“Content-Type”标头不匹配,但来自
badRequest(err)的纯文本消息正文不匹配。 -
@PeterLyons 获取请求本身返回 200 OK。在 chrome 的网络选项卡中,我可以看到管道响应。然而,在角度错误回调被触发。响应是 JSON 类型。 badRequest 根本没有被调用。
-
(真的)您能显示您的服务器代码正在运行的 HTTP 标头和正文吗?这就是我/我们可以帮助你的方式。将代码 sn-ps 与原始 HTTP 数据一起放入您的问题中,而不是其英文描述。然后我们就可以进行故障排除了。很明显响应体不是有效的 json,所以我们需要排查这是分块编码问题还是什么。
-
@PeterLyons 好的,我用标题和响应更新了我的问题。