为什么错误不是instanceof FirebaseError

问题描述 投票:0回答:1

我正在尝试在管理 SDK 中使用

instanceof FirebaseError
,它一直告诉我这不是它的实例,

async authenticationCheck(uid:string): Promise<boolean> {
    try {
      const auth = admin.auth();
      const user = await auth.getUser(uid);
      const checkUser = await admin.firestore().collection("users").doc(user.uid).get();
      if (checkUser.exists) {
        return true;
      } else {
        const userData = {
          "uid": user.uid,
        };
        admin.firestore().collection("users").doc(uid).set(userData);
        return false;
      }
    } catch (err:unknown) {
      if (err instanceof FirebaseError) {
        throw new APIError(
            err.code,
            HttpStatusCode.BAD_REQUEST,
            true,
            err.message,
        );
      }
      throw new Error("this") // this keep showing 
      // const echek = isFirebaseError(err);
    }

我尽一切可能做到最好,但

FirebaseError
没有像他应该的那样工作...我认为
Firebase team
需要审查这个
FirebaseError
以及如果您正在构建自己的后端,则需要更好的捕获错误的方法

node.js firebase google-cloud-firestore firebase-admin
1个回答
0
投票

Firestore 的管理 SDK(它只是 Google Cloud SDK 的包装器)不会抛出 FirebaseError 实例,因此您的代码将无法按您的预期运行。目前尚不清楚您尝试在此处使用的 FirebaseError 的类型到底是什么,因为您尚未显示此代码的导入。适用于 Nodejs 的 Firestore SDK 只是没有该类型(或任何错误类型)作为其公共 API的一部分。

事实上,NodeJS 的 Firestore SDK 没有专用的错误类型。它只是抛出错误实例。例如,以下是尝试使用

undefined
作为文档中的值时出现的错误消息:

抛出新错误(`${(0, validate_1.invalidArgumentMessage)(arg, desc)} 无法使用“undefined”作为 Firestore 值${fieldPathMessage}。` +

错误:参数“data”的值不是有效的 Firestore 文档。无法使用“undefined”作为 Firestore 值(在字段“foo”中找到)。如果您想忽略未定义的值,请启用

ignoreUndefinedProperties

如果您想检测 Firestore API 调用是否存在不可恢复的问题,您将需要对返回 Promise 的单个 API 调用进行 try/catch 或 then/catch,并且检查其类型没有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.