升级Firebase与GeoFire后调用set函数出现pieceNum_未定义错误求助
问题
升级旧Ionic Angular应用时,已将Firebase升级至9.23.0、GeoFire升级至6.0.0,调用GeoFire的set函数(传入ID与坐标数组)时出现以下错误,旧版本GeoFire运行正常,且无法回滚依赖。
错误信息:
error = TypeError: Cannot read properties of undefined (reading 'pieceNum_') at qt (geofire.min.js:590:980) at geofire.min.js:1299:1686 at rt (geofire.min.js:361:2620) at Qr (geofire.min.js:1299:1645) at As (geofire.min.js:1397:3182) at e.set (geofire.min.js:1430:9558)
当前环境信息(ionic info输出):
Ionic: Ionic CLI : 7.1.1 (/Users/username/.nvm/versions/node/v20.2.0/lib/node_modules/@ionic/cli) Ionic Framework : @ionic/angular 5.9.4 @angular-devkit/build-angular : 13.3.11 @angular-devkit/schematics : 13.3.11 @angular/cli : 13.3.11 @ionic/angular-toolkit : 6.1.0 Capacitor: Capacitor CLI : 5.5.1 @capacitor/android : 5.5.1 @capacitor/core : 5.5.1 @capacitor/ios : 5.5.1 Cordova: Cordova CLI : 12.0.0 (cordova-lib@12.0.1) Cordova Platforms : android 9.1.0, browser 6.0.0, ios 6.2.0 Cordova Plugins : cordova-plugin-ionic-webview 4.2.1, (and 3 other plugins) Utility: cordova-res : 0.15.4 native-run (update available: 2.0.0) : 1.7.4 System: ios-sim : 8.0.2 NodeJS : v20.2.0 (/Users/username/.nvm/versions/node/v20.2.0/bin/node) npm : 9.6.6 OS : macOS Unknown Xcode : Xcode 15.0.1 Build version 15A507
解决建议
- 调整GeoFire初始化方式:GeoFire 6.x适配Firebase 9+的模块化API,必须基于Firebase 9的
getDatabase获取实例后初始化,不能用旧的命名空间方式:import { getDatabase } from "firebase/database"; import { GeoFire } from "geofire-common"; const db = getDatabase(); const geoFire = new GeoFire(db.ref("your-location-node-path")); - 校验
set函数参数合法性:确认传入的坐标是严格的[纬度数值, 经度数值]数组,ID为非空字符串,避免格式错误触发内部逻辑异常:// 正确参数示例 geoFire.set("user_123", [37.7853889, -122.4056973]) .then(() => console.log("位置更新成功")) .catch(err => console.error("更新失败:", err)); - 清理依赖缓存重装:执行以下命令清除缓存并重新安装依赖,解决可能存在的版本不兼容缓存问题:
rm -rf node_modules package-lock.json npm install - 对齐Angular与Firebase版本:当前Angular 13.x可适配Firebase 9,但建议升级
@angular/fire到对应兼容版本(如7.5.x),确保模块调用逻辑匹配:npm install @angular/fire@^7.5.0 --save - 用未压缩源码排查:临时替换
geofire.min.js为未压缩版,查看更清晰的错误栈,定位pieceNum_相关代码的触发条件,确认是参数还是初始化环节的问题。
内容的提问来源于stack exchange,提问作者Sanjay Tibrewal
相关产品推荐
相关产品推荐

