注册功能报错TypeError及if条件逻辑异常问题求助
问题解决:注册功能的TypeError与逻辑异常
错误分析与修复步骤
1. 解决TypeError: Cannot read properties of undefined (reading 'email')
当输入的邮箱在数据库中不存在时,db.getUserByEmail(email)会返回undefined,此时直接访问emaildb.email就会触发该错误。必须先判断查询结果是否存在。
2. 修正if条件逻辑与错误的compareSync使用
compareSync是用于加密密码验证的方法(比如bcrypt库),对比明文邮箱完全没必要用它,直接用===判断即可。- 原逻辑完全颠倒:当前代码是「邮箱匹配(已存在)就提示注册完成」,正确逻辑应该是「邮箱已存在则提示重复,不存在才允许注册」。
修正后的完整代码
app.post('/register', redirectHome, async (req, res, next)=>{ try{ const email = req.body.email; let password = req.body.password; const emaildb = await db.getUserByEmail(email); // 补全变量声明 // 先判断邮箱是否已存在 if(emaildb){ const err_msg = 'User already exists!'; return res.render('register.ejs', {err_msg: err_msg}); } // 邮箱不存在,执行注册逻辑(需补充密码加密、写入数据库的代码) else{ // 示例:用bcrypt加密密码 // const hashedPassword = bcrypt.hashSync(password, 10); // await db.createUser(email, hashedPassword); const err_msg = 'Registration done!'; return res.render('register.ejs', {err_msg: err_msg}); } } catch(err) { // 捕获异步操作错误,避免服务器崩溃 next(err); } });
额外注意事项
- 变量
emaildb和err_msg要添加const/let声明,避免全局变量污染。 - 必须添加
catch块捕获异步错误,否则未处理的异常会导致服务器挂掉。 - 注册逻辑中务必加密用户密码,禁止明文存储。
内容的提问来源于stack exchange,提问作者babygoat
相关产品推荐
相关产品推荐

