使用EJS渲染后端错误消息时遇err未定义问题,求解决
解决EJS中"err is not defined"的问题
嘿,这个问题我太熟悉了!你遇到的是EJS模板里变量未定义的典型问题,咱们一步步来修复:
问题根源
你的Node.js代码里,只有发生错误时才会把err传给模板,成功时只传success——这就导致:
- 当请求成功时,EJS模板里尝试访问
err,但这个变量根本不存在,直接抛出err is not defined - 同理,如果只传
err,模板里的success也会触发同样的错误
两种修复方案
方案1:渲染时始终传递两个变量
不管成功还是失败,都把err和success都传给模板,不存在的那个设为null或undefined:
Node.js代码修改:
if (error) { console.log(error); let err = { msg: "Email Sent failed" }; // 同时传递success为null res.render("home", { err, success: null }); } else { let success = { msg: "Your message was sent, thank you!" }; // 同时传递err为null res.render("home", { err: null, success }); }
EJS代码不需要修改,因为null在条件判断中会被视为false,不会执行对应的代码块。
方案2:在EJS中先检查变量是否存在
如果不想修改Node.js代码,也可以在EJS里先判断变量是否被定义,再使用:
修改后的home.ejs代码:
<% if (typeof err !== 'undefined' && err) { %> <!-- contact-warning --> <div id="message-warning"> <p><%= err.msg %></p> </div> <% } %> <% if (typeof success !== 'undefined' && success) { %> <!-- contact-success --> <div id="message-success"> <i class="fa fa-check"></i> <br /> <p><%= success.msg %></p> </div> <% } %>
typeof err !== 'undefined'会先检查变量是否存在,避免直接访问未定义变量导致报错,之后再判断err是否有值。
推荐用方案1,代码更简洁直观,也符合模板渲染的最佳实践——确保模板用到的变量都被传递,哪怕是null。
内容的提问来源于stack exchange,提问作者Jemshith T K
相关产品推荐
相关产品推荐

