EJS导航栏报artist未定义错误 艺术家登录后编辑资料下拉框不显示
问题根因
- 你在app.js中仅给模板全局挂载了
currentUser变量存储登录用户(也就是你的项目里的艺术家),没有定义名为artist的全局模板变量,所以navbar渲染到<%=artist.id%>/<%=artist._id%>时会触发未定义引用报错 - 现有navbar的登录态逻辑冗余,同时写了下拉菜单内的Logout和单独的Logout链接,会重复显示退出按钮
修复方案
直接修改navbar.ejs的代码即可,不需要调整app.js的全局变量配置:
- 把编辑资料链接中的
artist.id替换为currentUser._id,直接使用已有的登录用户变量 - 删除下拉菜单外多余的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
相关产品推荐
相关产品推荐

