jade路由渲染时提示error undefined,无法加载login.jade如何解决
Jade模板渲染"undefined"错误排查方案
核心报错原因
你的layout.jade模板中使用了title、user、messages三个模板变量,渲染时如果这三个变量未被正确传递到模板侧,或者未做非空兜底判断,就会直接抛出undefined错误。
具体排查点
路由渲染逻辑未传递必填变量
渲染login页的路由代码中,必须给render方法传入所有模板依赖的变量,错误写法示例:// 错误:未传模板需要的变量 app.get('/login', (req, res) => { res.render('login') })修正后的写法:
app.get('/login', (req, res) => { res.render('login', { title: '用户登录', user: req.user || null, // 未登录状态下默认传null messages: req.flash ? req.flash() : {} // 若使用connect-flash则取对应内容,否则默认传空对象 }) })模板侧变量判断逻辑不严谨
你当前的模板中直接判断if messages.error,如果messages本身是undefined,访问error属性会直接报错,不会进入判断分支,需要先判断变量本身是否存在:// 修正前 if messages.error .alert.alert-danger div= messages.error // 修正后 if messages && messages.error .alert.alert-danger div= messages.error // 其余info、success判断同理修改模板缩进异常(次要排查点)
Jade是严格缩进敏感的模板引擎,你当前代码中.container节点的缩进层级比后续if messages节点高,属于语法合规但布局不符合预期的情况,如果调整布局可以将messages相关代码缩进调整和.container同级,或嵌套在.container内部。
内容的提问来源于stack exchange,提问作者Mrinal Anand
相关产品推荐
相关产品推荐

