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
相关产品推荐
相关产品推荐

