You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:54:47