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

EJS中msg_type未定义问题排查:路由差异导致登录页报错

解决EJS模板中"msg_type is not defined"报错问题

问题原因

  • 访问GET /login路由时,pages.js直接调用res.render("login"),未传递msg和msg_type变量,但EJS模板直接使用这两个未定义变量,触发报错。
  • 访问POST /auth/login时,控制器users.js会在渲染模板时传入这两个变量,因此页面能正常展示提示信息。
  • 之前用Handlebars无此问题,是因为Handlebars会默认处理未定义变量(如渲染为空或跳过),而EJS对未定义变量会直接抛出错误。

修复方案

方案1:修改EJS模板,增加变量存在性判断

调整login.ejs的提示框渲染逻辑,仅当msg和msg_type都存在时才渲染:

<% if (msg && msg_type) { %>
    <p class="<%= msg_type %>"><%= msg %></p>
<% } %>

方案2:在GET路由中默认传递空变量

修改pages.js的GET路由,渲染登录页时默认传入空的msg和msg_type:

router.get(["/", "/login"], (req, res) => {
  res.render("login", {
    msg: "",
    msg_type: ""
  });
});

额外修复:控制器冗余代码

users.js中第一个return res.render多传了next()参数,res.render的第二个参数仅需数据对象,应修改为:

if (!email || !password) {
  return res.status(400).render("login", {
    msg: "Kullanıcı Adınız veya Parolanız Hatalı",
    msg_type: "error",
  });
}

内容的提问来源于stack exchange,提问作者Tolkienist Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 17:45:37