Node.js运行EJS页面报pizzalist is not defined错误如何解决?
错误原因
你直接访问首页时触发的是GET /请求,查看对应路由逻辑可以看到,GET请求渲染index.ejs时仅传递了title参数,没有传递模板中用到的pizzalist变量,因此模板遍历变量时直接抛出未定义错误。只有触发POST请求提交数据后,才会查询所有披萨数据并传递pizzalist参数渲染页面,这就是你首次访问首页报错的核心原因。
修复步骤
1. 修改GET路由逻辑
在渲染首页前先查询所有披萨数据,将pizzalist同步传递给模板,修改后的router.route('/').get代码如下:
.get((req,res,next) => { pizzas.find() .then((pizzasfound) => { res.render('index.ejs', { title: 'Pizza shop', pizzalist: pizzasfound }); }, (err) => next(err)) .catch((err) => next(err)) })
2. 优化模板兼容空数据场景
为了避免无数据时遍历报错,可以给模板的循环逻辑加非空判断,修改index.ejs中表格tbody部分的代码如下:
<tbody> <% if(pizzalist && pizzalist.length) { %> <% for(var i=0; i < pizzalist.length; i++) { %> <tr> <td><%= pizzalist[i].name %></td> <td><%= pizzalist[i].description %></td> <td><%= pizzalist[i].customer %></td> </tr> <% } %> <% } else { %> <tr> <td colspan="3">暂无展示数据</td> </tr> <% } %> </tbody>
修改完成后重启服务即可正常访问首页。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

