目前,我在显示从我的 Web 服务 Node.js 服务器 (localhost:3000) 发送到运行在 Node.js 服务器 (localhost:3001) 上的模拟客户端的响应“ block ”时遇到问题。
- edit * - 当前的实现只使用 Angular 的 %http 作为没有 web-sockets 的传输
逻辑如下:
1.在“Cities”的客户端创建一个数组并将它们(从 AngularJS Controller )发布到位于以下位置的 Web 服务:localhost:3000/getMatrix
$http({
method: 'POST',
url: 'http://localhost:3000/getMatrix',
data: cityArray
}).
success(function (data,status,headers,config){
// binding of $scope variables
// calling a local MongoDB to store the each data item received
for(var key in data){
$http.post('/saveRoutes', data[key])
.success(function (data, status){
// Data stored
})
.error(function (data, status){
// error prints in console
});
}
}).
error(function (data,status,headers,config){
alert("Something went wrong!!");
});
2 。然后,Web 服务运行其进程以生成“城市”矩阵(例如,如果传递了 5 个城市,它将返回一个 5×5 [25 项] 的 JSON 矩阵)。但问题是它通过 Node 的 > response.write( data )
将数据以“ block ”的形式传回旁注 - Node.js 自动在标题中设置 'Transfer-Encoding':'chunked'
* Other code before (routing/variable creation/etc.) *
res.set({
'Content-Type':'application/json; charset=utf-8',
});
res.write("[\n");
* Other code to process loops and pass arguments *
// query.findOne to MongoDB and if there are no errors
res.write(JSON.stringify(docs)+",\n");
* insert more code to run loops to write more chunks *
// at the end of all loops
res.end("]");
// Final JSON looks like such
[
{ *data* : *data* },
{ *data* : *data* },
......
{ *data* : *data* }
]
目前的问题是不是“分 block ”响应没有到达其目的地,而是我不知道有一种方法可以在分 block 进入后立即开始处理数据。
这是一个问题,因为我试图做一个 250x250 的矩阵并等待完整的响应使 Angular 显示结果的能力重载,因为它试图一次完成所有操作(从而炸毁页面)。
这也是一个问题,因为我正在尝试将响应保存到 MongoDB,并且它只能处理一定大小的数据,然后才会“太大”而 MongoDB 无法处理。
我尝试查看 Angular 的 $q and the promise/defer API ,但是我对如何实现它有点困惑,并且还没有找到一种方法来开始处理数据 block 。
This question关于处理 block 的 SO 似乎也没有多大帮助。
任何有关在返回 AngularJS 时尝试显示分 block 数据的帮助或提示将不胜感激。
如果回复可以是展示该技术的信息性代码片段,我将不胜感激,因为看到一个示例不仅可以帮助我了解“文本”描述。
-- 谢谢
最佳答案
没有示例,因为我不确定您在传输代码方面使用的是什么/如果您有可用的 websocket:
$http 不支持执行任何回调,直到在请求结束时传回成功代码 - 它使用 200
监听 .onreadystatechange
> -like 值。
如果你想做这样的流,你要么需要使用 $http
并将其包装在一个传输层中,该传输层会调用多个 $http
结束并返回一个成功的 header 。
您也可以使用 websockets,而不是调用 $http
,而是在套接字中发出一个事件。
然后,为了将 block 返回给客户端,让服务器在后端将每个 block 作为新事件发出,并让前端监听该事件并为每个事件进行处理。
关于javascript - 'chunked' 响应进入 AngularJS 后立即显示的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22103927/