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