博客项目登录模块报错:error未定义,请求技术支持
解决登录错误提示的「error未定义」问题
问题根源
- 在
loginUser.js中,当用户不存在或密码不匹配时,错误尝试访问error.errors——这两种情况属于业务逻辑失败,而非数据库错误,此时回调参数error的值为null,访问error.errors会直接触发「error未定义」报错。 - 登录模板
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
相关产品推荐
相关产品推荐

