我正在尝试根据事件事件中的信息呈现页面。如何处理这一问题? [英] I am trying to render a page based upon information from an EventEmitter's events. How to approach this?

查看:0
本文介绍了我正在尝试根据事件事件中的信息呈现页面。如何处理这一问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Express呈现一个带有一些html的页面,该html是从事件Emitter中提取的信息构建的。

基本上现在的代码是这样的:

app.post("/login", (req, res) => {
  let factory = eventFactory(args);
  let client = factory.client();
  let html;
  client.once(client.Event.Ready, function() {
                                            html = buildHTML(someArgs);
                                            res.render("page", {html: html});
                                            })
}

这会使它一次变得很好。然而,我想让页面重新绘制新的事件。我知道我可以使用client.on()在每个接收到的事件上触发此回调,但我不相信仅仅更改它就会将任何事情推到客户端。

我尝试在应用的客户端使用简单的http-meta标记进行刷新,但在刷新时收到错误提示cannot GET /login

所以我认为我的设计在这里可能是不正确的。寻找有关如何处理或设计它的提示和/或建议,以便客户端在从事件处理程序接收到事件时获得更新的信息。执行此操作的唯一方法是使用AJAX或WebSockets吗?

谢谢

推荐答案

网络套接字允许您将新事件推送到客户端。使用AJAX,您必须重复轮询服务器,就像使用http-meta标记一样。您收到的错误是因为您的第一个请求是POST,而刷新请求是GET请求,并且您的服务器只支持POST(当然,这是可以修复的)。

顺便说一句,如果您不介意不完整的HTML页面,您可以使用一种不同的方法,利用这样一个事实:即使响应尚未完成,浏览器也会显示一个HTML页面。(浏览器会在一段时间后报告超时,但如果已经有要显示的内容,则可能不会。)

以下代码说明了这一想法。每一秒,都有一个事件增加一个计数器。这将作为一个HTMLp元素写入到客户端。在本例中,它们一个接一个地显示,但您可以使用css更改这一点,以便它们看起来像是在更新页面。

app.use(function(req, res) {
  var count = 0;
  res.write("<!DOCTYPE html><html><body>");
  setInterval(function() {
    res.write(`<p>${++count}</p>`);
  }, 1000);
});

进度指标&可以通过这种方式实现。

这篇关于我正在尝试根据事件事件中的信息呈现页面。如何处理这一问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆