Node.js项目使用EJS渲染404页面报path未定义错误如何解决
问题原因
报错日志明确提示path is not defined:你的navigation.ejs模板中用到了path变量做导航高亮判断,所有正常渲染的页面在调用res.render时都传递了path参数(比如user.js里渲染shop页面就传了path:'/'),但你渲染404页面的逻辑里没有给模板传递path参数,引入navigation.ejs时找不到变量就触发了报错。
解决方案
有两种可选方案,选任意一种即可:
- 给404渲染逻辑加path参数
找到你项目中定义404路由的代码(一般是所有路由最后注册的全局中间件),在res.render时传入path参数即可:
// 你的404路由逻辑,修改render部分 app.use((req, res) => { res.status(404).render('404', { pageTitle: '页面未找到', path: req.path // 也可以传空字符串'',这样导航栏两个选项都不会处于激活状态 }); });
- 给navigation.ejs的path变量加兜底判断
修改navigation.ejs里的两处path判断,加一层变量存在性校验,就算没传path也不会报错:
<li class="main-header__item"><a class="<%= typeof path !== 'undefined' && path === '/' ? 'active' : '' %>" href="/">Shop</a></li> <li class="main-header__item"><a class="<%= typeof path !== 'undefined' && path === '/admin/add-product' ? 'active' : ''%>" href="/admin/add-product">Add Product</a></li>
内容的提问来源于stack exchange,提问作者Adolfo Tomas Castrillon
相关产品推荐
相关产品推荐

