我的web應用程序是99%靜態的,除了在頁面加載時,如果他們已經登錄,我想向客戶端發送他們的用戶名和他們連接到的房間的名稱(如果他們在URL中指定的話)。這兩個變量需要在客戶端Javascript中訪問。所以我一直在試圖弄清楚什麼感覺像一個簡單的任務,但我運氣不大。如何在頁面加載時從節點服務器向JavaScript客戶端發送變量?
使用模板引擎。
- 問題:矯枉過正,因爲我只需要一個/兩個變量原本靜態的頁面上,我需要訪問它在JavaScript中,而不是HTML
讓頁面後一個AJAX請求負載
- 問題:導致閃爍,因爲首先在頁面加載,然後DOM更新一兩秒鐘後,因爲要等待要發送和接收的請求。而且它效率不高,因爲它需要第二個請求/響應。
使用WebSockets
- 問題:上面那個問題一樣。
發送它的頭信息在頁面加載
- 問題:除非你做a weird hack這隻能作爲一個單獨的AJAX調用無法訪問在Javascript頭信息。可以使用#2。
所以我結束了用餅乾做這個工作的,100%。目前實際上沒有任何問題,我只是認爲代碼非常醜陋而且很脆弱,我正在尋找更好的方法。這是一個什麼樣的餅乾解決方案看起來像一個片段:
app.get('/room/:roomName', function(req, res) {
res.clearCookie('room');
if (req.isAuthenticated()) {
res.cookie('username', req.user.username);
} else {
res.cookie('username', '');
}
var roomName = req.params.roomName;
if (roomNameToRoom.hasOwnProperty(roomName)) {
res.cookie('room', req.params.roomName);
}
res.sendFile(path.join(__dirname, '../public/index.html'));
});
正如你可以看到我抓住從請求的用戶名和驗證的房間,如果它是有效的,我發送回來。然後我在客戶端使用RegEx解析cookie(非常混亂),並在JavaScript函數中使用這兩個變量。我正在尋找其他解決方案,這將允許我在一個請求中發送這一切,同時避免複雜性和混亂。
你會推薦哪種模板?我發現的那些HTML代碼太複雜了,不適合我。儘管我傾向於#6。我能否在服務器端不使用文件的情況下使用#6?就像在服務器上假裝JSON對象是客戶端上的'ajax.js'。 –
我不會建議一些確切的模板,但你可以創建node.js服務器,它使用指定擴展名的文件(如php解釋器)。 #6你可以隨心所欲地做。 – vitaliydev