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

在Next.js 14服务器组件中获取完整Firestore错误信息

解决Next.js服务器组件中Firestore错误信息丢失的问题

问题根源

你用throw new Error(error)抛出错误时,Firestore的原始错误对象被转换成普通Error的字符串形式,导致包含索引创建URL的关键细节被丢失。Firestore错误对象本身携带code、含索引链接的message、errorInfo等字段,直接包装会丢失这些信息。

解决方案

1. 直接抛出原始错误

无需用new Error()包装,直接抛出Firestore返回的原始错误对象,Next.js的错误边界会捕获并展示完整错误信息:

async function getData() {
  let res;

  try {
    res = await dbAdmin
      .collectionGroup("Business")
      .where("info.slug.short", "==", "enterprise")
      .get();
  } catch (error) {
    // 直接抛出原始错误,保留所有细节
    throw error;
  }

  // 修正:collectionGroup.get()返回QuerySnapshot,用empty判断是否无结果
  if (res.empty) {
    return undefined;
  }

  // 按需返回单个或所有文档数据,示例返回所有文档数据
  return res.docs.map(doc => doc.data());
}

2. 自定义错误并保留关键信息

如果需要自定义错误消息,同时保留Firestore的细节,可以手动提取错误字段:

async function getData() {
  let res;

  try {
    res = await dbAdmin
      .collectionGroup("Business")
      .where("info.slug.short", "==", "enterprise")
      .get();
  } catch (error) {
    const firestoreError = new Error(`Firestore查询失败: ${error.message}`);
    // 附加原始错误的关键字段
    firestoreError.code = error.code;
    firestoreError.details = error.details;
    firestoreError.errorInfo = error.errorInfo;
    throw firestoreError;
  }

  if (res.empty) {
    return undefined;
  }

  return res.docs.map(doc => doc.data());
}

3. 开发环境打印完整错误

开发阶段可以在catch中打印完整错误对象,直接从控制台获取索引创建URL:

async function getData() {
  let res;

  try {
    res = await dbAdmin
      .collectionGroup("Business")
      .where("info.slug.short", "==", "enterprise")
      .get();
  } catch (error) {
    // 开发环境打印完整错误,控制台会显示带索引URL的message
    console.error("Firestore完整错误:", error);
    throw error;
  }

  if (res.empty) {
    return undefined;
  }

  return res.docs.map(doc => doc.data());
}

额外修正:QuerySnapshot判断逻辑错误

你的代码中!res.exists是错误用法:collectionGroup.get()返回的是QuerySnapshot(查询结果集合),而exists是单个文档对象(DocumentSnapshot)的属性。判断查询是否无结果应该使用res.empty。

内容的提问来源于stack exchange,提问作者Taio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:40:11