在登录期间,我将userId保存在jQuery cookie中,以便我可以$.cookie('userId')
访问它。
现在我正试图从Jade访问它,as,
- if ($.cookie('userId') === userId)
我收到错误
$未定义
如何访问Cookie?
我的代码:
- if (($.cookie('userId')) === userId)
input(type='submit', value='Move')
else
input(type='submit', disabled, value='Move'')
答案 0 :(得分:14)
你似乎误解了概念。我来给你讲课。 ;)
基础知识。 Cookie存储在客户端。因此,当在客户端运行此脚本时,使用jQuery $.cookie('userId')
将检索它。
但是你在服务器端使用JADE模板引擎。所以你甚至没有把页面发送到客户端。那么你想要检索什么cookie?没有cookie,因为你在服务器上。
还有更多。运行$.cookie('userId')
会抛出错误,因为您在服务器端。没有$
个对象。并且不可能,因为你不能在服务器端使用jQuery(嗯,实际上你可以,但目前这是无关紧要的)。您是否在路线系统中定义了$
对象?或者你定义了助手$
?我不这么认为。
Express + JADE教程。现在让我给你一个简短的教程。假设您有一个视图(在app.js
)
app.get('/', function(req, res){
res.render('index.jade', { code: 500 });
});
现在在index.jade
中,您可以使用code
作为变量。所以你可以这样编写你的index.jade
:
// some code
- if (code == 500)
input(type='submit', disabledm, value='Move')
- else
input(type='submit', value='Move')
// some code
现在它会起作用!如果预定义它们,也可以在模板中使用JavaScript函数。例如(在app.js
)
app.helpers({
positive: function(no) { return no > 0; }
});
然后在index.jade
模板中,您可以使用
- if (positive(-13))
input(type="submit")
甚至将这两个概念结合起来
- if (positive(code))
// do some stuff
要cookie还是不要cookie。如果你真的需要使用cookies(例如你不应该除了会话或CSRF),那么你需要使用客户端JavaScript。这意味着您需要添加(在jQuery之后)
script(src='my-path/my-script.js')
到index.jade
文件,然后像这样写my-script.js
$(document).ready(function() {
if ($.cookie('userId') == userId) {
// do something like append input to some holder
}
});
但该解决方案存在一些问题。第一:什么是userId
(平等的第二部分)?您需要在index.jade
中预定义它。例如,使用
script
var userId = #{ user.id };
并在您的路线中添加user
个对象。第二:cookie是局部变量。设置它们需要额外的服务器代码,我不喜欢这些代码。这使得维护应用程序更加困难。最后:将用户的id存储在cookie中似乎毫无意义。最终用户甚至不必知道它自己的id。服务器需要知道!会话系统在这里很方便。
最后的注释。您编写的代码向我们表明您无法区分服务器端和客户端JavaScript。解决问题的方法是学习,学习和学习。阅读有关JADE,Express和Node.js的教程和所有内容。
答案 1 :(得分:1)
@freakish说的是对的。你正在尝试服务器端和客户端 如果设置了cookie,您应该可以在服务器上访问它,如此
app.use(express.cookieParser());
app.get('/', function(req, res){
// index is jade template
// local variable on jade template holds cookie value
// use req.cookies.userid
res.render('index', { userid: req.cookies.userid });
});