Firebase Function部署报错:functions.region不是函数,如何修改区域并部署?
解决Firebase Functions部署错误「TypeError: functions.region is not a function」
错误原因
这个报错是因为你当前使用的firebase-functions版本为v4.0.0+(对应Firebase v2函数运行时),但代码里用的是v1版本的functions.region()写法——v2运行时已经废弃了这个API,改用新的区域配置方式。
两种解决办法
办法一:适配v2函数运行时(推荐)
直接修改代码的区域配置逻辑,删掉原来的const regionalFunctions = functions.region('europe-west1');,改用runWith方法或直接在onCall中指定区域。修改后的完整代码如下:
const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(); exports.sendNotificationToAllUsers = functions .runWith({ region: 'europe-west1' }) .https.onCall(async (data, context) => { // Optional: Check if the user calling the function is authenticated or has specific roles // if (!context.auth) { // // Throwing an HttpsError so that the client gets the error details. // throw new functions.https.HttpsError('unauthenticated', 'The function must be called while authenticated.'); // } const title = data.title || 'Default Title'; // Get title from the data sent by the client, or use a default const body = data.body || 'Default Body'; // Get body from the data sent by the client, or use a default const message = { notification: { title: title, body: body, }, data: { page: 'highlights', // All values in the 'data' payload MUST be strings }, android: { priority: 'high', notification: { sound: 'default', } }, topic: 'all', // Sending to a topic that all users are subscribed to. // Or, you can use 'android_users' if you want to target only Android users // and they are subscribed to that specific topic. }; try { const response = await admin.messaging().send(message); console.log('Successfully sent message:', response); return { success: true, message: 'Notification sent successfully to all users.', messageId: response }; } catch (error) { console.error('Error sending message:', error); // Throwing an HttpsError so that the client gets the error details. throw new functions.https.HttpsError('internal', 'Error sending notification.', error); } });
也可以选择更简洁的写法,直接在onCall中传入区域配置:
exports.sendNotificationToAllUsers = functions.https.onCall({ region: 'europe-west1' }, async (data, context) => { // 函数逻辑同上 });
办法二:降级到v1函数运行时
如果想保留原有代码写法,只需安装v3版本的firebase-functions:
npm install firebase-functions@3.x --save
安装完成后,你的原有代码无需修改即可正常部署。
部署验证
修改完成后,执行以下命令部署函数:
firebase deploy --only functions:sendNotificationToAllUsers
内容的提问来源于stack exchange,提问作者Andreas Hadjimamas
相关产品推荐
相关产品推荐

