在JADE中访问jQuery对象

在login期间,我将用户$.cookie('userId')保存在一个jQuery cookie中,以便我可以通过$.cookie('userId')来访问它。

现在我正试图从Jade访问它,

 - if ($.cookie('userId') === userId) 

我得到一个错误

$未定义

我怎样才能访问cookie?

我的代码:

 - if (($.cookie('userId')) === userId) input(type='submit', value='Move') else input(type='submit', disabled, value='Move'') 

你似乎误解了概念。 让我给你演讲。 ;)

基本。 Cookie存储在客户端。 因此,使用jQuery $.cookie('userId')将在客户端运行此脚本时检索它。

但是在这里你在服务器端使用JADE模板引擎。 所以你甚至没有把页面发送到客户端。 那么你想要检索什么cookie? 没有cookie,因为你在服务器上。

还有更多。 运行$.cookie('userId')会引发错误,因为您在服务器端。 没有$对象。 而不可能,因为你不能在服务器端使用jQuery(呃,其实你可以,但是现在是不相关的)。 你在路由系统中定义了$ object吗? 还是你定义的助手$ ? 我不这么认为。

Express + JADE教程。 现在让我给你一个简短的教程。 假设你有一个视图(在app.js

 app.get('/', function(req, res){ res.render('index.jade', { code: 500 }); }); 

现在在index.jade你可以使用code作为variables。 所以你可以编写你的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,你不应该使用cookie),那么你需要使用客户端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 } }); 

但是这个解决scheme有几个问题。 首先: userId是什么(平等的第二部分)? 你需要在你的index.jade预定义它。 例如使用

 script var userId = #{ user.id }; 

并在您的路线中添加user对象。 其次:Cookie是局部variables。 设置它们需要额外的服务器代码,我不喜欢你想要的东西。 这使得应用程序更难维护。 最后:将用户的ID存储在cookie中似乎毫无意义。 最终用户甚至不必知道它是自己的ID。 服务器需要知道! 会话系统在这里得心应手。

最后的笔记。 你写的代码告诉我们,你不能区分服务器端和客户端的JavaScript。 解决您的问题是学习,学习和学习。 阅读教程和一切有关JADE,Express和Node.js。

@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 }); });