一尘不染

一旦它们进入AngularJS,如何显示“块状”响应?

angularjs

当前,我在显示从我的Web服务Node.js服务器(localhost:3000)发送到运行在Node.js服务器(localhost:3001)上的模拟客户端的响应的“块”时遇到问题。

  • 编辑*-当前实现仅使用Angular的%http作为没有网络套接字的传输方式

逻辑如下:

1。在“城市”的客户端上创建一个数组,并将其发布(从AngularJS控制器中)到位于以下位置的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 Service将通过其过程来创建“城市”矩阵(例如,如果传递了5个城市,则它将返回5by5
[25个项目]的JSON矩阵)。但是要注意的是,由于Node的>response.write(data),它可以“大块”地传回数据。

旁注-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* }
]

当前的问题 不是 “分块”响应没有到达目的地,而是我不知道一种方法,一旦有块进入,就开始处理数据。

这是一个问题,因为我正在尝试创建一个250x250的矩阵,并等待完整的响应过载,因此Angular在尝试一次完成所有操作时会显示结果(从而炸毁了页面)。

这也是一个问题,因为我试图将响应保存到MongoDB,并且它只能处理一定大小的数据,然后再对MongoDB处理“太大”的数据。

我曾尝试研究Angular的 $ qpromise / deferAPI
,但对如何实现它有些困惑,还没有找到一种方法来处理传入的数据块。

试图在返回AngularJS时显示分块数据的任何帮助或技巧将不胜感激。

如果响应可以是证明该技术的翔实代码片段,那么我将不胜感激,因为看到一个示例不仅可以帮助我了解“文本”描述,还可以。

- 谢谢


阅读 178

收藏
2020-07-04

共1个答案

一尘不染

没有例子,因为我不确定您在传输代码方面使用什么/是否有可用的网络套接字:

$ http不支持执行任何回调,直到在请求结束时传递成功代码为止-它.onreadystatechange使用200-like值监听。

如果要执行这样的流,则需要使用$http它并将其包装在一个传输层中,该传输层将$http结束所有多次调用并返回成功标头。

您还可以使用websockets,而不是调用$http,而是在套接字中发出事件。

然后,为了将块返回给客户端,让服务器在后端将每个块作为新事件发出,并让前端侦听该事件并对每个事件进行处理。

2020-07-04