Node.js中MySQL查询返回对象无法访问属性问题求助
问题原因与修复方案
你的问题出在查询结果的解构错误:
db.query执行SELECT语句后返回的是二维数组,格式为[ [用户对象列表], 结果元数据 ]- 你用
const [existingUser] = await db.query(...)拿到的是第一个元素——也就是整个用户列表数组(控制台输出里的[{email:..., password:...}]),而非列表里的单个用户对象
这就导致直接访问existingUser.email返回undefined:因为这是个数组,不是用户对象,数组本身没有email属性,只有索引0对应的元素才是你要的目标对象。
修复方式(二选一)
方式1:双重解构直接获取单个用户对象
router.post('/login', async function (req, res) { const userData = req.body; const enteredEmail = userData.email; const enteredPassword = userData.password; // 双重解构,拿到结果数组里的第一个用户对象 const [[existingUser]] = await db.query(`SELECT * FROM users WHERE email = ?`, [enteredEmail]); console.log(existingUser.email); // 正常输出run@gmail.com console.log(existingUser.password); // 正常访问密码字段 });
方式2:先取结果数组,再提取第一个元素(更直观)
router.post('/login', async function (req, res) { const userData = req.body; const enteredEmail = userData.email; const enteredPassword = userData.password; // 先拿到用户列表数组(忽略元数据) const [userList] = await db.query(`SELECT * FROM users WHERE email = ?`, [enteredEmail]); // 提取列表里的第一个用户对象 const existingUser = userList[0]; console.log(existingUser.email); // 正常输出邮箱 console.log(existingUser.password); // 正常访问密码字段 });
修复后控制台变化
修复完成后,typeof existingUser会显示为用户对象类型,existingUser.hasOwnProperty('email')返回true,existingUser.email也能正确获取到对应值。
内容的提问来源于stack exchange,提问作者Gia IZYUMSKIY
相关产品推荐
相关产品推荐

