当前位置: 首页 > 面试题库 >

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

冉德元
2023-03-14
问题内容

当前,我在显示从我的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时显示分块数据的任何帮助或技巧将不胜感激。

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

- 谢谢


问题答案:

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

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

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

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

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



 类似资料:
  • 我正在Spring Boot中构建一个非常简单的REST服务,请求如下: < li >获取/API/资源 < li >发布/API/资源 < li>GET /api/resources/id < li >删除/api/resources/id 但是当我转到 localhost:8080/swagger-ui.html 时,我得到了一个非常长的不存在的冗余endpoint列表,例如: 删除 /api

  • 本文向大家介绍AngularJS改变元素显示状态,包括了AngularJS改变元素显示状态的使用技巧和注意事项,需要的朋友参考一下 前言 本文描述使用AngularJS提供的ng-show和ng-hide指令实现自动监听某布尔型变量来改变元素显示状态。 控制html元素显示和隐藏有n种方法:html的hidden、css的display、jQuery的hide()和show()、bootstrap

  • 问题内容: 我想垂直显示一个滑块控件。我只关心支持范围滑块控件的浏览器。 我发现一些注释和参考资料似乎表明将高度设置为大于宽度会导致浏览器自动更改方向,但是在我的测试中,这仅 适用于Opera,而 过去不再适用于Opera。如何垂直定位HTML5范围滑块? 问题答案: 首先,将高度设置为大于宽度。从理论上讲,这就是您所需要的。在HTML5规格建议尽可能多的: … UA根据样式表指定的高度和宽度属性

  • 我正在使用改型从我的android应用程序做api调用。但是响应显示带有ok消息的状态代码200。但是调用的数据由HttpClient返回。那么我该如何处理我的呼叫的响应数据呢?这里的回应将是 请求有效载荷 /okHttp.okHttpClient:{“data”:{“email”:“foobar@gmail.com”,“password121”}} 回应: OKHttp.OKHttpClient

  • 好吧,问题很简单,但我不知道怎么做。我试着逐个检查两个元素,但这不是最好的方法。我有一组圆形物体。数组有位置字段X和Y。我想遍历数组,检查所有元素是否在一条线上(水平或垂直)。我如何通过数组检查圆心是否在同一条线上。 我试着做这样的事情,看看圆圈是否在同一条垂直线上,但我说它需要一个元素与邻居。

  • 我在一个容器(100%宽度)中有2列(内联块)。 > 左侧列必须有一个最小宽度,例如200px,宽度:25%。 右侧列宽度:75% 在调整大小时达到最小宽度之前,列并排放置,这是我想要的,但一旦最小宽度开始,右列就会落在下一行上。 我怎样才能使右边的列缩小而不落在下一行上呢? 链接到JSFiddle