Nodejs中如何在jade里判断session的状态

Nodejs中如何在jade里判断session的状态

新手,看社区里置顶的教程N-blog。模版引擎都是ejs,我建立项目的时没注意,默认成了jade。浏览了一下jade的官方示例。能够写基本的语句。但是N-blog里下面这一段 <% if( locals.user ){ %> <span><a title=“登出” href="/logout">logout</a></span> <% } else { %> <span><a title=“登录” href="/login">login</a></span> <% } %> 在jade里怎么写呢?我试了下面的,但登入登出都是显是登出: if locals.user span a(title=“登出” href = “”) else span a(title=“登录” href="") 在post里已经设置了req.session.user

想问一下,应该怎么写? 大家用jade吗?还是那句话,求推荐jade的资料啊。


6 回复

Node.js 中如何在 Jade 模板里判断 Session 状态

问题描述

你正在使用 Jade 模板引擎,并希望根据用户的 session 状态来显示不同的链接(例如登录或登出)。你在尝试将 EJS 中的条件语句转换为 Jade 时遇到了一些困难。

示例代码

首先,确保你的 Express 应用已经正确设置了 session 中间件。以下是一个简单的例子:

const express = require('express');
const session = require('express-session');

const app = express();

app.use(session({
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: true
}));

app.get('/login', (req, res) => {
  req.session.user = { name: 'John Doe' };
  res.render('index', { user: req.session.user });
});

app.get('/logout', (req, res) => {
  req.session.destroy((err) => {
    if (err) throw err;
    res.redirect('/');
  });
});

app.set('view engine', 'jade');

app.listen(3000, () => console.log('Server started on port 3000'));

在这个例子中,当用户访问 /login 路由时,会设置一个 session 变量 user,然后渲染 index.jade 模板。

接下来,在 Jade 模板中进行条件判断:

doctype html
html
  head
    title Jade Example
  body
    if user
      span
        a(title="登出" href="/logout") 登出
    else
      span
        a(title="登录" href="/login") 登录

解释

  • if userelse: 这是在 Jade 中进行条件判断的标准语法。如果 locals.user 存在,则渲染登出链接;否则,渲染登录链接。

  • title="登出"title="登录": 使用 = 符号来插入属性值。

  • href="/logout"href="/login": 同样使用 = 符号来插入链接地址。

总结

通过上述代码示例,你可以看到如何在 Jade 模板中根据 session 状态显示不同的链接。这可以通过简单的条件语句实现。如果你对 Jade 模板引擎不太熟悉,可以参考官方文档或一些教程来进一步学习。


还是不行,我照着node.js开发指南上抄了一遍也不行。不管怎么登录,都没有反应。我是不是该看看session 的工作原理。有推荐文档吗? 非常感谢。

额,里面不是这么写的,我copy过来时,乱码啦,觉得这个不是重点,就自个儿编了下。见谅,见谅。下面是实际代码 if(user) li: a(href="/login")登出 li: a(href="/reg")发表 else li: a(href="/login")登录 li: a(href="/login")注册

你可以先写html 然后html2jade

非常感谢,又涨姿势啦。

在Jade模板引擎中(现在更名为Pug),你可以使用与EJS类似的条件语句来判断locals.user的存在与否,并根据其状态显示不同的链接。

下面是将给定的EJS代码转换为Jade(Pug)的示例:

if locals.user
  span
    a(title="登出" href="/logout") 登出
else
  span
    a(title="登录" href="/login") 登录

解释

  1. 条件判断if locals.user 这一行用于检查locals.user是否存在。如果存在,则表示用户已登录。
  2. 输出HTML:当条件满足时(即用户已登录),输出一个指向/logout的链接;否则输出一个指向/login的链接。
  3. 属性和文本a(title="登出" href="/logout") 登出 这部分定义了一个链接,其title属性值为“登出”,文本内容为“登出”。对于未登录的情况,链接的href属性值为/login,文本内容为“登录”。

确保你的后端代码正确地设置了req.session.user,这样在模板渲染时,locals.user就会被正确传递到前端模板中。

为什么您的代码不起作用?

在您尝试的代码中,所有的href属性值为空字符串,这显然是错误的。应该根据用户的登录状态设置正确的URL。此外,确保locals.user确实包含正确的信息。如果locals.user没有正确传递或设置,即使语法正确,也无法正常工作。

希望这个示例能帮助您解决问题!如果您需要更多关于Pug模板引擎的信息,可以查阅官方文档,它提供了详细的语法说明和用法示例。

回到顶部