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
相关产品推荐
相关产品推荐

