我正在尝试根据事件事件中的信息呈现页面。如何处理这一问题? [英] I am trying to render a page based upon information from an EventEmitter's events. How to approach this?
本文介绍了我正在尝试根据事件事件中的信息呈现页面。如何处理这一问题?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用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(当然,这是可以修复的)。
以下代码说明了这一想法。每一秒,都有一个事件增加一个计数器。这将作为一个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屋!
查看全文