使用EJS渲染后端错误信息时出现err未定义问题求助
解决EJS渲染时"err is not defined"的问题
这个报错的根源很清晰:你的EJS模板直接访问了err变量,但只有在请求出错时,后端才会把err传递给模板;当请求成功时,后端只传了success,模板里根本不存在err这个变量,所以EJS会抛出未定义的错误。
下面给你两种简单有效的解决思路:
方案1:后端渲染时统一传递所有可能用到的变量
修改你的Node.js代码,不管请求成功还是失败,都把err和success两个变量传给模板,对应状态下把另一个设为null即可:
if (error) { console.log(error); let err = { msg: "Email Sent failed", }; // 成功状态的变量设为null res.render("home", { err, success: null }); } else { let success = { msg: "Your message was sent, thank you!", }; // 错误状态的变量设为null res.render("home", { success, err: null }); }
这样模板里的if (err)判断就不会报错了——变量始终存在,只是对应状态下的值为null,条件会自动不成立。
方案2:在EJS模板里先检查变量是否存在
不需要修改后端代码,直接调整EJS的判断逻辑,先确认变量存在再使用。这里有两种写法可选:
方式A:用typeof检查变量是否定义
<% 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> <% } %>
方式B:通过locals对象访问变量
EJS中所有传入模板的变量都会挂载在locals对象上,直接通过它访问即使变量未定义也只会返回undefined,不会报错:
<% if (locals.err) { %> <!-- contact-warning --> <div id="message-warning"> <p><%= err.msg %></p> </div> <% } %> <% if (locals.success) { %> <!-- contact-success --> <div id="message-success"> <i class="fa fa-check"></i> <br /> <p><%= success.msg %></p> </div> <% } %>
两种方案都能解决你的问题,选哪个看你更习惯哪种写法~
内容的提问来源于stack exchange,提问作者Jemshith T K
相关产品推荐
相关产品推荐

