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

博客项目登录模块报错:error未定义,请求技术支持

解决登录错误提示的「error未定义」问题

问题根源

  1. 在loginUser.js中,当用户不存在或密码不匹配时,错误尝试访问error.errors——这两种情况属于业务逻辑失败,而非数据库错误,此时回调参数error的值为null,访问error.errors会直接触发「error未定义」报错。
  2. 登录模板login.ejs中使用的errors变量,未在登录控制器中传递,导致模板无法获取flash存储的错误信息。

具体修改步骤

1. 修正loginUser.js的错误处理逻辑

替换原代码为:

const bcrypt = require('bcrypt')
const User = require('../models/User')

module.exports = (req, res) =>{
  const { username, password } = req.body;

  User.findOne({username:username}, (dbError, user) => {
    // 处理数据库查询异常
    if (dbError) {
      req.flash('validationErrors', ['数据库查询出错'])
      return res.redirect('/auth/login')
    }

    if (user){
      bcrypt.compare(password, user.password, (bcryptError, same) =>{
        // 处理密码验证异常
        if (bcryptError) {
          req.flash('validationErrors', ['密码验证出错'])
          return res.redirect('/auth/login')
        }

        if(same){ 
          req.session.userId = user._id
          res.redirect('/')
        }
        else{
          // 密码不匹配时自定义错误消息
          req.flash('validationErrors', ['密码错误'])
          res.redirect('/auth/login')
        }
      })
    }
    else{
      // 用户不存在时自定义错误消息
      req.flash('validationErrors', ['用户名不存在'])
      res.redirect('/auth/login')
    }
  })
}

2. 确保登录控制器传递错误信息到模板

修改负责渲染登录页面的loginController.js,将flash中的错误信息传给模板的errors变量:

module.exports = (req, res) => {
  res.render('login', { errors: req.flash('validationErrors') })
}

3. 修正login.ejs的HTML结构错误

原模板中<ul>标签提前闭合,修正为:

<% if(errors != null && errors.length > 0){ %>
  <ul class="list-group">
    <% for (var i = 0; i < errors.length; i++) { %>
      <li class="list-group-item list-group-item-danger"><%= errors[i] %></li>
    <% } %>
  </ul>
<% } %>

4. 清理冗余代码

删除index.js中多余的一行:

const { error } = require('console')

内容的提问来源于stack exchange,提问作者pia punya Munirah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:15:47