You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置默认用户名或显示注册按钮,避免undefined错误?

解决未登录时页面渲染报错的问题

问题原因

未登录状态下req.user是undefined,直接访问req.user.username会触发TypeError: Cannot read properties of undefined (reading 'username');同时原路由代码的渲染参数传递方式有误——res.render的第二个参数需要是键值对对象,直接传字符串变量会导致模板无法正确获取user值。

方案1:给user设置默认值

修改路由逻辑,先判断用户是否登录,存在则取用户名,否则设为默认值,同时修正渲染参数的传递格式:

router.get("/", function (req, res, next) {
  // 判断req.user是否存在,存在则取username,否则用默认值
  const userName = req.user ? req.user.username : "访客";
  // 传递包含user键的对象,模板才能正确读取<%= user %>
  res.render("index", { user: userName });
});

模板保持不变:

Welcome, <%= user %>

未登录时页面会显示Welcome, 访客,避免报错。

方案2:根据登录状态显示不同内容(注册/登录按钮)

这种方案更贴合用户体验,未登录时显示注册、登录按钮,登录后显示欢迎语:

  1. 修改路由,传递登录状态和用户名:
router.get("/", function (req, res, next) {
  const renderData = {
    isLoggedIn: !!req.user, // 转为布尔值标记登录状态
    userName: req.user ? req.user.username : ""
  };
  res.render("index", renderData);
});
  1. 模板中添加条件判断(以EJS为例):
<% if (isLoggedIn) { %>
  Welcome, <%= userName %>
<% } else { %>
  <a href="/register">注册</a> | <a href="/login">登录</a>
<% } %>

这样未登录时不会触发错误,还能引导用户进行注册或登录操作。

内容的提问来源于stack exchange,提问作者Dagger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:05:01