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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:26:22