Nodejs express3.0 ejs模板的里面判断变量是否存在报错?

Nodejs express3.0 ejs模板的里面判断变量是否存在报错?

<% if (user) { %> xxx <% } %>

如果没有把这个变量输出在这个模板上,为什么网页上会报 user is not defined

这样写似乎可以,不过太难看了

<% if (typeof user !== ‘undefined’ ) %> xxx <% } %>

我看cnode里面用到了locals.user来判断就可以了,不知道3.0有没有解决办法?

<% if (locals.user) { %> xxx <% } %>


4 回复

Node.js Express 3.0 EJS 模板中判断变量是否存在时遇到问题

问题描述

在使用 EJS 模板引擎时,尝试判断某个变量(如 user)是否存在,并根据其存在与否来渲染不同的页面内容。但当该变量未定义时,页面会出现错误信息 “user is not defined”。

示例代码及解释

错误代码示例:

<% if (user) { %>
    <p>Welcome, <%= user.name %></p>
<% } %>

问题原因: 当你直接在 EJS 模板中引用一个未定义的变量(如 user),EJS 引擎会抛出一个错误,因为它无法找到这个变量。

解决方案

方法一:检查变量类型 你可以通过检查变量是否为 undefined 来避免错误:

<% if (typeof user !== 'undefined') { %>
    <p>Welcome, <%= user.name %></p>
<% } %>

方法二:使用 locals 对象 在 Express 中,可以通过 res.locals 向模板传递数据。这样,你可以在模板中安全地访问这些数据:

// 在路由处理函数中设置 locals
app.get('/', function(req, res) {
    res.locals.user = { name: 'John Doe' };
    res.render('index');
});

然后在模板中这样使用:

<% if (locals.user) { %>
    <p>Welcome, <%= locals.user.name %></p>
<% } %>

方法三:默认值 另一种优雅的方法是给变量提供一个默认值:

<% var user = user || {}; %>
<% if (user.name) { %>
    <p>Welcome, <%= user.name %></p>
<% } %>

总结

在 EJS 模板中判断变量是否存在时,需要确保变量已被正确定义或通过 locals 对象传递到模板中。以上方法可以帮助你避免在未定义变量时出现错误。


还是没明白。望大神指教。

在使用 Node.js 的 Express 3.0 框架结合 EJS 模板引擎时,如果在 EJS 模板中直接检查 user 变量是否存在,可能会遇到未定义的情况。这是因为变量作用域的问题。

解决方案

  1. 使用 locals 对象

    在 Express 中,可以通过 res.locals 对象来设置模板的局部变量。这样,在 EJS 模板中可以直接通过 locals.user 来访问该变量。

    // 在路由处理函数中
    app.get('/', function(req, res) {
        res.locals.user = { name: 'John Doe' };  // 设置用户信息
        res.render('index');  // 渲染模板
    });
    

    在 EJS 模板中:

    <% if (locals.user) { %>
        <p>User is logged in: <%= locals.user.name %></p>
    <% } else { %>
        <p>No user is logged in.</p>
    <% } %>
    
  2. 使用默认值

    如果你不希望总是使用 locals 对象,可以在传递给 EJS 模板的数据中包含默认值。

    // 在路由处理函数中
    app.get('/', function(req, res) {
        const user = req.session.user || null;
        res.render('index', { user: user });
    });
    

    在 EJS 模板中:

    <% if (user) { %>
        <p>User is logged in: <%= user.name %></p>
    <% } else { %>
        <p>No user is logged in.</p>
    <% } %>
    

这两种方法都可以避免在 EJS 模板中直接检查 user 变量是否存在的问题。第一种方法利用了 res.locals 对象来确保变量在模板上下文中可用,而第二种方法则是在数据传递阶段就进行了变量的存在性检查。

回到顶部