注册功能报错咨询:TypeError读取username属性失败问题
问题分析与修复方案
核心问题定位
你的代码存在三个关键错误,导致了当前的异常表现:
数据库查询回调参数顺序错误
MySQL(或mysql2)的query回调参数顺序为(err, results, fields),你写成了(err, result, data),导致data实际是字段元数据而非查询结果。这使得用户存在时的判断逻辑完全失效,同时用户不存在时错误进入创建流程。多余的同步查询语句
const result = db.query(q, [req.body.username]);这行代码无意义,会触发重复查询且未处理结果,直接删除即可。SQL插入语句语法错误
插入语句中的VALUE应为复数VALUES,单数形式会导致SQL语法错误。潜在的请求体解析问题
如果你的Express应用未配置express.json()或body-parser中间件,req.body会是undefined,直接触发Cannot read properties of undefined (reading 'username')错误。
修正后的代码
export const register = (req, res) => { // 检查用户是否存在 const q = "SELECT * FROM users WHERE username = ?"; db.query(q, [req.body.username], (err, results) => { if (err) return res.status(500).json(err); // 存在查询结果则返回用户已存在提示 if (results.length) return res.status(409).json("用户已存在!"); // 创建新用户:哈希密码 const salt = bcrypt.genSaltSync(10); const hashedPassword = bcrypt.hashSync(req.body.password, salt); const insertQ = "INSERT INTO users (`username`,`email`,`password`,`name`) VALUES (?)"; const values = [ req.body.username, req.body.email, hashedPassword, req.body.name, ]; db.query(insertQ, [values], (err) => { if (err) return res.status(500).json(err); return res.status(200).json("用户创建成功。"); }); }); };
额外配置检查
确保你的Express主文件中添加了请求体解析中间件:
const express = require('express'); const app = express(); // 解析JSON格式的请求体 app.use(express.json());
内容的提问来源于stack exchange,提问作者Fadel Muhammad
相关产品推荐
相关产品推荐

