2016-07-23 87 views
0

我能夠設置和訪問會話變量,例如req.session.t1等,並且所有工作都可以在服務器端正常工作。在客戶端,我在前端安裝了jquery,並通過jade模板訪問。如何在express.js中訪問來自express和節點js的會話變量

我在functions.js:

$(function(){   

    var t1 = req.session.t1;  

    $('.results').append(t1); 

});   

因此,作爲頁/玉模板負荷,jQuery也追加爲概述,如果我使用常量或字符串的數據,但是會話變量是不確定的,如果我使用req.session.x或session.x。

所以問題是,我怎麼會最好能夠通過jQuery,會話變量操縱?或者我需要保存到數據庫並每次都將其拉起來?我是新手,不知道如何在節點js和快遞和jQuery中做到這一點。

回答

2

Node.js/express在服務器上運行

jQuery運行在客戶端上。

唯一共享的是您發送給客戶端的任何內容。

如果你想讓一個變量可以在客戶端訪問,你需要在響應中發送它。

如果您要給服務器JSON返回,只需添加一個字段即可。

res.send({t1: req.session.t1}); // (node.js side) 

如果要輸出模板,可以將其寫入HTML標記或直接寫入腳本標記。

玉例如:

script. // .jade file 
    var t1 = "#{t1}" 

而在服務器:

res.render('template.jade', {t1: req.session.t1}); 
+0

我發現我可以像上面描述的那樣訪問會話變量,而不必通過路由器傳遞它們。嘗試一下。只需創建它們,它們就會自動在玉器中使用。這就是我得到上面發佈的解決方案的工作,我訪問會話變量,我沒有通過任何路線或任何東西傳遞他們。 –

+0

這與玉是否可用無關。它仍然是服務器。 – Ven

-2

我發現在this answer

答案我改變了最好的答案,以適應我的情況,這是

script(type='text/javascript'). 
    var t1 = #{session.t1} 

原來,Jade模板可以使用express的會話變量來創建頁面,但是一旦創建並顯示,它們就不再可用於前端JavaScript調用,但是如果您專門使用它們創建JavaScript變量,那麼這些變量可用於前端JavaScript,這就是你如何將它傳遞給你的jQuery和JavaScript。很酷吧?

+0

你正在重新哈希究竟是什麼@Ven [已經回答](http://stackoverflow.com/a/38544030/1541563) –

+0

我獨立地找到了這個答案,我發佈後,我看到@Ven也回答它幾秒前。這不應該讓我失望。這是相同答案的無辜重疊。 :-)我會選擇Vens答案作爲最好的答案,因爲它有最好的解釋。 :-) –

+0

這不是「前幾秒鐘」,它是2分鐘前,這個答案沒有提供任何額外的信息後,Ven的答案,因此downvote。 –

1

我希望你明白你的會話狀態是在服務器上,你的jQuery在瀏覽器中,這些是完全不同的計算機。瀏覽器的網頁中沒有req對象。這是一個服務器端對象,它只在Web請求正在處理時才存在,並且一旦網頁已發送到瀏覽器並且正在被瀏覽器處理,該對象就不再存在。

因此,這解釋了爲什麼在瀏覽器中沒有req對象。

有幾種方法可以從瀏覽器中提供的會話中獲取一些信息。

  1. 您可以使用您的模板系統在您的網頁中生成一些包含所需信息的Javascript變量。然後,你的jQuery可以在你的網頁中讀取這些Javascript變量的值,並且用它們做它想要的。

  2. 您可以創建一個ajax調用,您可以在瀏覽器中通過jQuery進行調用以聯繫服務器並從用戶會話請求信息。

  3. 您可以設置一些特定的會話信息(如用戶名)到服務器的cookie中,然後該cookie將從客戶端的jQuery代碼中讀取。