gpt4 book ai didi

node.js - NodeJS Express - 渲染页面自动更新

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:20 24 4
gpt4 key购买 nike

我有一个后端 NodeJS 代码,我在其中收集衍生进程的输出:

    schild.stdout.on('data', function (data) {
var result = data.toString().split("\n");
for(var i = 0; i < result.length; i++)
{
var n = result[i].split("|");
if(n.length == 4)
{
var date = n[0];
var category = n[1];
var component = n[2];
var condition = n[3];
response.push({Date : date, Category : category, Component : component, Condition : condition});
}
}
logger.info('Rendering : ' + response.length);
res.render('viewpage', {status:0, msg:'Success', responsedata:response});

});

我的 viewpage.ejs 文件包含以下代码:

var oTable = $('#example').dataTable({"bDestroy" : true, "bUseRendered": false, "bSort" : false, "bPaginate" : true, "bDeferRender": true, "iDisplayLength" : 27});
var status = <%= status %>;
if(status == 2)
{
alert( '<%= msg %>' );
}
if(status == 0)
{
<% for(var i =0; i < responsedata.length; i++){ %>
$('#example').dataTable().fnAddData(['<%= responsedata[i].Date %>', '<%= responsedata[i].Category %>' , '<%= responsedata[i].Component %>', '<%= responsedata[i].Condition %>']);
<% } %>
oTable.fnDraw();
}
} );

问题是页面仅在第一次调用“res.render”时呈现,但我希望使用“schild.stdout.on”事件中捕获的进一步输出来更新页面。我确实在记录器语句中看到,第一次响应数组的长度为 0,这是正确的,但随后我获得了有效数据并呈现到 View - 但页面没有使用最新数据进行更新。该页面仅加载一次并且页面上不会发生进一步的更新?

最佳答案

因此,您需要不同的设计才能实现此目的。类似于 socket.io可以帮助将数据从服务器流式传输到浏览器,但您需要按照以下方式进行操作:

  1. 使用空数据和 JavaScript 渲染基本 HTML 页面来处理 socket.io
  2. 通过浏览器中的 JavaScript,建立 socket.io 连接并请求数据流
  3. 使用与您现有的代码类似的代码,将服务器子进程的输出 data 事件转换为 socket.io 消息,因为单个数据单元可用
  4. 在浏览器中,当每个数据单元从服务器到达时,将其格式化为 HTML 并将其附加到表格中。

关于node.js - NodeJS Express - 渲染页面自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14021664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com