我正在尝试在管理 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
以及如果您正在构建自己的后端,则需要更好的捕获错误的方法
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,并且检查其类型没有帮助。