【问题标题】:Firebase function error - Object is possibly 'undefined'Firebase 函数错误 - 对象可能是“未定义”
【发布时间】:2020-05-12 19:27:34
【问题描述】:

我正在尝试向 Firebase 部署一个简单的功能。

当在集合 todos 中创建一个新的 write 时,我希望将通知发送给带有令牌的订阅者:

evGBnI_klVQYSBIPMqJbx8:APA91bEV5xOEbPwF4vBJ7mHrOskCTpTRJx0cQrZ_uxa-QH8HLomXdSYixwRIvcA2AuBRh4B_2DDaY8hvj-TsFJG_Hb6LJt9sgbPrWkI-eo0Xtx2ZKttbIuja4NqajofmjgnubraIOb4_

为了实现这一点,我遵循了一个教程,但是在部署时,它给出了错误

下面是我function的代码:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';

admin.initializeApp(functions.config().firebase);

exports.newSubscriberNotification = functions.firestore
.document('todos')
.onCreate(async event=>{
    const data = event.data();
    const workdesc = data.workdesc;
    const subscriber = "evGBnI_klVQYSBIPMqJbx8:APA91bEV5xOEbPwF4vBJ7mHrOskCTpTRJx0cQrZ_uxa-QH8HLomXdSYixwRIvcA2AuBRh4B_2DDaY8hvj-TsFJG_Hb6LJt9sgbPrWkI-eo0Xtx2ZKttbIuja4NqajofmjgnubraIOb4_";

// notification content
const payload = {
    notification: {
        title: 'new write in collection todos',
        body: workdesc,
       //body: 'body',
        icon: 'https://img.icons8.com/material/4ac144/256/user-male.png'
    }
}

// send notification
return admin.messaging().sendToDevice(subscriber, payload)

});

错误:

src/index.ts:11:11 - error TS6133: 'workdesc' is declared but its value is never read.

11     const workdesc = data.workdesc;
             ~~~~~~~~

src/index.ts:11:22 - error TS2532: Object is possibly 'undefined'.

11     const workdesc = data.workdesc;

Found 2 errors.

npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! functions@ build: `tsc`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the functions@ build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

编辑 1

按照指导进行2次更改后,当我部署该功能时,它仍然给HTTP Error: 400,附上截图

【问题讨论】:

    标签: typescript firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    TypeScript 错误消息告诉您有两个问题。

    首先,您尝试访问可能未定义的对象的属性,这会导致崩溃。 data 可能未定义,因为这是函数签名的一部分。实际上,对于 onCreate 函数,它永远不会被定义,因此您可以像这样使用 ! 运算符覆盖它,以告诉 TypeScript 您确定它永远不会未定义:

        const data = event.data()!;
    

    另一个错误是告诉您您只是声明了一个从未使用过的变量。您声明了workdesc,但从未使用过它。只需删除它 - 您的代码不需要它。如果你需要使用它,那就这样做吧。

    【讨论】:

    • 我编辑了我的问题,在我的有效载荷中我正在使用它,但仍然收到此错误src/index.ts:10:11 - error TS6133: 'workdesc' is declared but its value is never read. 10 const workdesc = data.workdesc;
    • 您实际上还没有使用 workdesc 的值。您正在传递值为“${workdesc}”的文字字符串。只需单独使用 workdesc,不要放在引号中。
    • `body: workdesc,`我认为这解决了错误,但现在弹出了新的错误说Functions deploy had errors with the following functions: newSubscriberNotification,Error: Functions did not deploy properly.
    • 很抱歉再次打扰您,我已经更新了问题,附上您指导的两次更改后的错误截图。
    • 如果您有新问题,请单独发布。 Stack Overflow 不是解决同一篇文章中一系列问题的好论坛。每个问题都应该有自己的帖子。
    猜你喜欢
    • 2019-08-05
    • 2022-01-05
    • 1970-01-01
    • 2021-10-07
    • 2021-12-29
    • 2020-12-01
    • 2021-03-11
    • 1970-01-01
    • 2021-12-21
    相关资源
    最近更新 更多