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

Firestore .data()返回undefined问题求助

问题分析与解决方案

核心问题

你遇到的doc.data()返回undefined,本质是Firestore文档要么不存在,要么你查询的UID与实际存储的文档ID不匹配,根源出在用户创建流程的时序和后端路由逻辑上。


第一步:修复后端路由逻辑

你之前在post接口回调里动态注册get路由的做法完全错误,会导致路由重复注册、返回旧用户数据的问题。直接在post接口返回创建好的Firebase用户记录即可:

app.post('/api/user', jsonParser, (req, res) => {
  const user = req.body;
  getAuth()
    .createUser({
      email: user.email,
      password: user.password,
      displayName: user.name,
    })
    .then((UserRecord) => {
      console.log(UserRecord);
      // 直接把用户记录返回给前端,不需要额外的info接口
      res.status(200).json(UserRecord);
    })
    .catch((err) => {
      console.log(err);
      res.status(500).json({ error: err.message });
    });
});

删除之前动态添加的/api/user/info路由,彻底避免路由冲突。


第二步:修复前端创建用户的时序问题

你之前的axios.post和axios.get是并行执行的,完全没等用户创建完成就去拿UID,大概率拿到的是旧数据或者空值,导致Firestore文档ID错误。改用async/await保证时序:

async function createUser(email, password, name, rol) {
  try {
    // 等待用户创建请求完成,拿到正确的用户UID
    const res = await axios.post('http://localhost:5000/api/user', {
      email,
      password,
      name,
      rol,
    });
    const userRecord = res.data;
    // 用返回的正确UID创建Firestore文档
    const docRef = doc(db, `users/${userRecord.uid}`);
    await setDoc(docRef, { email, name, rol });
    console.log('用户创建并存储成功');
  } catch (err) {
    console.error('创建用户失败:', err);
  }
}

第三步:完善前端获取数据的逻辑

给getUserData加上文档存在判断,明确问题所在,避免data()返回undefined的模糊情况:

async function getUserData(uid) {
  const docRef = doc(db, `users/${uid}`);
  const docSnap = await getDoc(docRef);
  console.log(docSnap);
  
  // 先判断文档是否存在
  if (docSnap.exists()) {
    const data = docSnap.data();
    console.log('用户数据:', data);
    return data;
  } else {
    console.error(`UID为${uid}的用户文档不存在`);
    return null;
  }
}

问题根源总结

  1. 时序错误:并行发起post和get请求,导致用错误的UID创建Firestore文档,后续查询时找不到对应数据。
  2. 后端路由设计错误:动态注册路由会导致重复路由,返回旧的用户数据。
  3. 缺少存在性判断:直接调用data()而不检查文档是否存在,导致返回undefined时无法定位问题。

内容的提问来源于stack exchange,提问作者Andrés Marino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:05:15