Firestore创建GeoPoint报错:TypeError: GeoPoint不是构造函数
解决Firebase Admin SDK 12.0中
admin.firestore.GeoPoint不是构造函数的问题 你在使用Firebase Admin SDK 12.0编写Cloud Functions时,尝试通过new admin.firestore.GeoPoint(lat, lon)创建地理点对象,触发了以下错误:
TypeError: admin.firestore.GeoPoint is not a constructor
问题原因
Firebase Admin SDK 12.0对Firestore的API结构进行了调整,GeoPoint类不再作为admin.firestore的属性存在,而是需要通过单独导入或从已初始化的Firestore实例中访问。
解决方案
有两种可行的修复方式:
方式一:直接导入GeoPoint类
修改顶部的导入语句,直接引入GeoPoint:
const functions = require('firebase-functions'); const admin = require('firebase-admin'); // 新增GeoPoint的导入 const { GeoPoint } = require('firebase-admin/firestore'); admin.initializeApp(); const firestore = admin.firestore();
然后创建GeoPoint对象时直接使用:
const geoPoint = new GeoPoint(lat, lon);
方式二:从已初始化的Firestore实例中访问GeoPoint
因为你已经初始化了firestore实例(const firestore = admin.firestore();),可以直接通过该实例调用GeoPoint:
const geoPoint = new firestore.GeoPoint(lat, lon);
修改后的完整代码示例
这里采用方式二的修改,不需要额外导入:
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); const firestore = admin.firestore(); exports.processGzipCSVMonthly = functions.runWith({ timeoutSeconds: 540 }).https.onRequest(async (req, res) => { try { //... //data is content of a CSV file //... const collectionRef = firestore.collection('Adresses'); let batch = firestore.batch(); data.forEach((entry) => { const codeInsee = entry['code_insee']; const nomVoie = entry['nom_voie']; const numero = entry['numero']; const lon = parseFloat(entry['lon']); const lat = parseFloat(entry['lat']); // Génération d'un ID de document aléatoire const docId = firestore.collection('Temp').doc().id; // 从firestore实例创建GeoPoint对象 const geoPoint = new firestore.GeoPoint(lat, lon); // Enregistrement du de la rue et de ses adresse dans le document sous la collection Adresses batch.set(collectionRef.doc(docId), { numero, geoPoint, codeInsee, nom_voie: nomVoie }); }); await batch.commit(); res.status(200).send('Traitement terminé avec succès.'); } catch (error) { console.error('Erreur lors du traitement du fichier :', error); res.status(500).send('Une erreur est survenue lors du traitement.'); } });
内容的提问来源于stack exchange,提问作者Broshet
相关产品推荐
相关产品推荐

