Node.js 在JADE中访问jQuery对象
在登录期间,我将userId保存在jQuery cookie中,以便我可以通过$.cookie'userId'访问它 现在我正试图从Jade处获取它Node.js 在JADE中访问jQuery对象,node.js,haml,express,pug,Node.js,Haml,Express,Pug,在登录期间,我将userId保存在jQuery cookie中,以便我可以通过$.cookie'userId'访问它 现在我正试图从Jade处获取它 - if ($.cookie('userId') === userId) 我犯了一个错误 未定义$ 我如何访问cookie 我的代码: - if (($.cookie('userId')) === userId) input(type='submit'
- 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'会抛出错误,因为您位于服务器端。没有$object。这是不可能的,因为您不能在服务器端很好地使用jQuery,实际上您可以,但这在目前是无关紧要的。是否在路线系统中定义了$object?还是定义了helper$?我不这么认为 快速+翡翠教程。现在让我给你一个简短的教程。假设你在app.js中有一个视图 现在在index.jade中,您可以使用代码作为变量。因此,您可以编写index.jade,例如:
// some code
- if (code == 500)
input(type='submit', disabledm, value='Move')
- else
input(type='submit', value='Move')
// some code
现在它会起作用的!若预定义了JavaScript函数,也可以在模板中使用它们。例如,在你的app.js中
然后在index.jade模板中可以使用
- if (positive(-13))
input(type="submit")
甚至将这两个概念结合起来
- if (positive(code))
// do some stuff
要曲奇还是不要曲奇。如果您真的需要使用cookie,并且除了会话或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
}
});
但这种解决方案存在几个问题。第一:什么是用户ID平等的第二部分?您需要在index.jade中预定义它。例如使用
script
var userId = #{ user.id };
以及在路由中添加用户对象。第二:cookies是局部变量。设置它们需要额外的服务器代码,这是我不希望看到的。这使得维护应用程序变得更加困难。最后:将用户id存储在cookie中似乎毫无意义。最终用户甚至不必知道自己的id。服务器需要知道!会话系统在这里很方便
最后一点。您编写的代码告诉我们,您无法区分服务器端和客户端JavaScript。解决你的问题的办法是学习,学习,再学习。阅读有关JADE、Express和Node.js的教程和所有内容。您似乎误解了这些概念。让我给你讲讲 基础知识。Cookie存储在客户端。因此,在客户端运行此脚本时,使用jQuery$.cookie'userId'将检索它 但这里您在服务器端使用JADE模板引擎。所以你甚至还没有将页面发送到客户端。那么,您想要检索什么cookie呢?没有cookie,因为您在服务器上 还有更多。运行$.cookie'userId'会抛出错误,因为您位于服务器端。没有$object。这是不可能的,因为您不能在服务器端很好地使用jQuery,实际上您可以,但这在目前是无关紧要的。是否在路线系统中定义了$object?还是定义了helper$?我不这么认为 快速+翡翠教程。现在让我给你一个简短的教程。假设你在app.js中有一个视图 现在在index.jade中,您可以使用代码作为变量。因此,您可以编写index.jade,例如:
// some code
- if (code == 500)
input(type='submit', disabledm, value='Move')
- else
input(type='submit', value='Move')
// some code
现在它会起作用的!若预定义了JavaScript函数,也可以在模板中使用它们。例如,在你的app.js中
然后在index.jade模板中可以使用
- if (positive(-13))
input(type="submit")
甚至将这两个概念结合起来
- if (positive(code))
// do some stuff
要曲奇还是不要曲奇。如果您真的需要使用cookie,并且除了会话或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
}
});
但这种解决方案存在几个问题。第一:什么是用户ID平等的第二部分?您需要在index.jade中预定义它。例如使用
script
var userId = #{ user.id };
以及在路由中添加用户对象。第二:cookies是局部变量。设置它们需要额外的服务器代码,这是我不希望看到的。这使得维护应用程序变得更加困难。最后:将用户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 });
});
“怪物”说的是对的。您正在尝试服务器端和客户端。
如果设置了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 });
});
谢谢你提到的所有要点。你说得很对,我把客户端和服务器端搞砸了。。。这是根本问题。谢谢你指出这一点。。。伟大的谢谢你提到的所有要点。你说得很对,我把客户端和服务器端搞砸了。。。这是根本问题。谢谢你指出这一点。。。伟大的感谢您提供req.cookies.userid。将在适当的时候尝试。感谢req.cookies.userid。我会在适当的时候尝试。