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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:57:57