当前,我在显示从我的Web服务Node.js服务器(localhost:3000)发送到运行在Node.js服务器(localhost:3001)上的模拟客户端的响应的“块”时遇到问题。
逻辑如下:
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的 $ q 和 promise / deferAPI ,但对如何实现它有些困惑,还没有找到一种方法来处理传入的数据块。
试图在返回AngularJS时显示分块数据的任何帮助或技巧将不胜感激。
如果响应可以是证明该技术的翔实代码片段,那么我将不胜感激,因为看到一个示例不仅可以帮助我了解“文本”描述,还可以。
- 谢谢
没有例子,因为我不确定您在传输代码方面使用什么/是否有可用的网络套接字:
$ http不支持执行任何回调,直到在请求结束时传递成功代码为止-它.onreadystatechange使用200-like值监听。
.onreadystatechange
200
如果要执行这样的流,则需要使用$http它并将其包装在一个传输层中,该传输层将$http结束所有多次调用并返回成功标头。
$http
您还可以使用websockets,而不是调用$http,而是在套接字中发出事件。
然后,为了将块返回给客户端,让服务器在后端将每个块作为新事件发出,并让前端侦听该事件并对每个事件进行处理。