在JADE中访问jQuery对象

use*_*745 1 haml node.js express pug

在登录期间,我将userId保存在jQuery cookie中,以便我可以访问它$.cookie('userId').

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

- if ($.cookie('userId') === userId)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

$未定义

我如何访问cookie?

我的代码:

- if (($.cookie('userId')) === userId)
                                                input(type='submit', value='Move')
                                            else
                                                input(type='submit', disabled, value='Move'')
Run Code Online (Sandbox Code Playgroud)

fre*_*ish 14

你似乎误解了概念.我来给你讲课.;)

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

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

还有更多.运行$.cookie('userId')会抛出错误,因为您在服务器端.没有$对象.并且不可能,因为你不能在服务器端使用jQuery(嗯,实际上你可以,但目前这是无关紧要的).你$在路线系统中定义了对象吗?或者你定义了帮手$?我不这么认为.

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

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

现在index.jade你可以code用作变量.所以你可以这样编写你index.jade的例子:

// some code
- if (code == 500)
    input(type='submit', disabledm, value='Move')
- else
    input(type='submit', value='Move')
// some code
Run Code Online (Sandbox Code Playgroud)

现在它会工作!如果预定义它们,也可以在模板中使用JavaScript函数.例如(在你的app.js)

app.helpers({
    positive: function(no) { return no > 0; }
});
Run Code Online (Sandbox Code Playgroud)

然后在index.jade模板中你可以使用

- if (positive(-13))
    input(type="submit")
Run Code Online (Sandbox Code Playgroud)

甚至结合这两个概念

- if (positive(code))
    // do some stuff
Run Code Online (Sandbox Code Playgroud)

cookie或不cookie.如果您确实需要使用cookie(例如,除了会话或CSRF之外,您不应该使用cookie),那么您需要使用客户端JavaScript.这意味着你需要添加(在jQuery之后)

script(src='my-path/my-script.js')
Run Code Online (Sandbox Code Playgroud)

index.jade文件并写my-script.js这样的

$(document).ready(function() {
  if ($.cookie('userId') == userId) {
    // do something like append input to some holder
  }
});
Run Code Online (Sandbox Code Playgroud)

但是该解决方案存在一些问题.第一:什么是userId(平等的第二部分)?你需要预先定义它index.jade.例如使用

script
    var userId = #{ user.id };
Run Code Online (Sandbox Code Playgroud)

user在您的路线中添加对象.第二:cookie是局部变量.设置它们需要额外的服务器代码,我不喜欢这些代码.这使得维护应用程序更加困难.最后:将用户的id存储在cookie中似乎毫无意义.最终用户甚至不必知道它自己的id.服务器需要知道!会话系统在这里很方便.

最后的说明.您编写的代码向我们表明您无法区分服务器端和客户端JavaScript.解决问题的方法是学习,学习和学习.阅读有关JADE,Express和Node.js的教程和所有内容.