我正在使用 express 來呈現帶有一些 html 的頁面,這些 html 是根據從 eventEmitter 中提取的資訊構建的。
基本上現在的代碼是這樣的:
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 的唯一方法嗎?
謝謝
uj5u.com熱心網友回復:
Web 套接字將允許您將新事件推送到客戶端。使用 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);
});
可以以這種方式實作“進度指示器”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417371.html
標籤:
上一篇:將Auth0API保護的路由與Express路由處理程式一起使用
下一篇:EJS條件渲染
