You need to enable JavaScript to run this app. Express+Mongoose项目访问artists路由时EJS报Artists未定义错误
优惠活动
大模型
产品
解决方案
定价
更多

Express+Mongoose项目访问artists路由时EJS报Artists未定义错误

问题排查与修复方案

核心报错原因

报错本质是EJS模板使用的变量名,和路由渲染时传入的上下文变量名大小写不匹配:

  • 你在/artists路由中,给模板传递的上下文参数是小写开头的artists,对应代码为res.render('artists/index', { artists })
  • 但你在artists/index.ejs的循环逻辑里,错误使用了大写开头的Artists,模板引擎全局查找这个大写变量时找不到对应定义,因此抛出Artists is not defined错误

之前venues功能能正常运行,是因为venues路由传入的变量名、对应模板里使用的变量名大小写完全一致,不存在这类不匹配问题。

具体修复操作

  • 打开项目下views/artists/index.ejs文件
  • 找到循环渲染列表的代码行,将遍历的源变量从大写Artists修改为和路由传入一致的小写artists
  • 修改完成后的循环代码参考:
<ul>
 <%  for (let artist of artists) {%>
  <li><a href="/artists/<%= artist._id %>"><%= artist.name %></a></li>
     <% } %> 
 </ul>

修改后重启服务再访问/artists路由,即可正常拉取渲染数据库中的artist数据。

补充提醒:Mongoose模型名Artist的大小写是模型的定义规则,和渲染时传给模板的数组变量名没有强制绑定关系,写模板时只要保证和路由render方法里传的键名完全一致(包括大小写),就不会触发这类未定义变量的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 23:27:03