我可以设置和访问会话变量,如req.session.t1等,所有这些都可以在服务器端正常工作。在客户端,我在前端安装了jquery,并通过jade模板访问。
我在functions.js:
$(function(){
var t1 = req.session.t1;
$('.results').append(t1);
});
因此,当页面/ jade模板加载时,如果我使用常量或字符串,jquery会按照概述附加数据,但如果我使用req.session.x或session.x,会话变量是未定义的。
所以问题是,我怎样才能最好地通过jQuery,会话变量进行操作?或者我是否需要保存到DB并每次都将其拉出来?我是新手,不知道如何在节点js和express和jquery中这样做。
答案 0 :(得分: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});
答案 1 :(得分:1)
我希望你明白你的会话状态是在服务器上,你的jQuery在浏览器中,那些是完全不同的计算机。浏览器的网页中没有req
个对象。这是一个服务器端对象,仅在Web请求被处理时才存在,并且一旦网页被发送到浏览器并且浏览器正在处理它就不再存在。
因此,这解释了为什么浏览器中没有req
对象。
您可以通过多种方式在浏览器中提供会话中的某些信息。
您可以使用模板系统在网页中生成包含所需信息的一些Javascript变量。然后,您的jQuery可以在您的网页中读取这些Javascript变量的值,并随意执行它们。
您可以在浏览器中创建一个可以通过jQuery创建的ajax调用,以联系服务器并从用户会话中请求信息。
您可以通过服务器将一些特定的会话信息(如用户名)设置为cookie,然后可以从客户端的jQuery代码中读取该cookie。
答案 2 :(得分:-2)
我根据自己的情况更改了最佳答案,而且
script(type='text/javascript').
var t1 = #{session.t1}
事实证明,Jade模板可以使用来自express的会话变量来创建页面,但是一旦创建和显示,它们就不再可用于前端JavaScript调用,但如果你专门使用它们来创建javascript变量,那么那些是可用于前端javascript,这就是你如何将它传递给你的jquery和javascript。很酷?