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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:09:55