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

EJS导航栏报artist未定义错误 艺术家登录后编辑资料下拉框不显示

问题根因

  • 你在app.js中仅给模板全局挂载了currentUser变量存储登录用户(也就是你的项目里的艺术家),没有定义名为artist的全局模板变量,所以navbar渲染到<%=artist.id%>/<%=artist._id%>时会触发未定义引用报错
  • 现有navbar的登录态逻辑冗余,同时写了下拉菜单内的Logout和单独的Logout链接,会重复显示退出按钮

修复方案

直接修改navbar.ejs的代码即可,不需要调整app.js的全局变量配置:

  1. 把编辑资料链接中的artist.id替换为currentUser._id,直接使用已有的登录用户变量
  2. 删除下拉菜单外多余的Logout链接

修复后的navbar.ejs关键片段:

<div class="navbar-nav ms-auto">
  <% if(currentUser) {%> 
    <li class="nav-item dropdown">
      <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
        <%= currentUser.name || '个人中心' %> <!-- 这里可以替换成你想显示的用户名,没有就保留默认文字 -->
      </a>
      <ul class="dropdown-menu" aria-labelledby="navbarDropdown">
        <li><a class="dropdown-item" href="/artists/<%=currentUser._id%>/edit">Edit profile</a></li>
        <li><a class="dropdown-item" href="/logout">Logout</a></li>
      </ul>
    </li>  
  <% } else { %> 
    <a class="nav-link active" href="/login">Login</a>
    <a class="nav-link active" href="/artists/new">Sign Up</a>
  <% } %>
</div>

如果需要额外显示用户名在下拉按钮上,可以直接调用currentUser的用户名字段,比如currentUser.username之类的,和你数据库存的字段对应即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:27:02