#typescript #firebase #google-cloud-functions
# #typescript #firebase #google-cloud-функции
Вопрос:
Я использую облачные функции Firebase и использую их только для отправки уведомлений, поэтому я хотел создать класс для упрощения создания этих уведомлений (json-подобных объектов), но при доступе к свойству этого json-подобного объекта он возвращает undefined .
Класс выглядит следующим образом:
class Notification
{
title: string
body: string
constructor(t: string, b: string)
{
this.title = t
this.body = b
}
Message =
{
"notification":
{
"title": this.title,
"body": this.body
}
}
}
При прямом доступе к переменной title она возвращает правильное значение, пример:
let newNotification = new Notification("TITLE", "BODY")
console.log(newNotification.title) // logs -> TITLE
Но при доступе к заголовку сообщения возвращает undefined:
console.log(newNotification.Message.notification.title) // logs -> undefined
Текущий код выглядит следующим образом:
let newNotification = new Notification ("Title test", "Body test")
console.log(newNotification.title) // logs -> Title test
console.log(newNotification.Message.notification.title) // logs -> undefined
admin.messaging ().sendToTopic (topic, newNotification.Message)
.then (topicNotificationMessage =>
{
console.log("Notification OK")
response.send("Notification OK")
})
.catch (notificationError =>
{
console.log (notificationError)
response.send("Notification Error" notificationError)
})
Консоль Firebase регистрирует это:
Ошибка ошибки уведомления: полезная нагрузка сообщения содержит недопустимое значение для свойства «notification.title». Значения должны быть строками.
Полная ошибка:
{ Error: Messaging payload contains an invalid value for the "notification.title" property. Values must be strings.
at FirebaseMessagingError.Error (native)
at FirebaseMessagingError.FirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:42:28)
at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/user_code/node_modules/firebase-admin/lib/utils/error.js:88:28)
at new FirebaseMessagingError (/user_code/node_modules/firebase-admin/lib/utils/error.js:253:16)
at /user_code/node_modules/firebase-admin/lib/messaging/messaging.js:615:27
at Array.forEach (native)
at /user_code/node_modules/firebase-admin/lib/messaging/messaging.js:612:32
at Array.forEach (native)
at Messaging.validateMessagingPayload (/user_code/node_modules/firebase-admin/lib/messaging/messaging.js:605:21)
at /user_code/node_modules/firebase-admin/lib/messaging/messaging.js:442:37
errorInfo:
{ code: 'messaging/invalid-payload',
message: 'Messaging payload contains an invalid value for the "notification.title" property. Values must be strings.' },
codePrefix: 'messaging' }
Я, честно говоря, не знаю, что я делаю не так.
Ответ №1:
Я думаю, у вас может возникнуть проблема с уровнем, с которого вызывается ваш метод «уведомления». Он не видит значения того, что вы ожидаете от this.title . Я также предполагаю, что если бы вы отбросили this.title, это также дало бы вам нулевое значение для this.body. Метод уведомления имеет свой собственный заголовок и переменную body, и они не заданы. Я не уверен, каково решение, поскольку прошло много лет с тех пор, как я делал подобные вещи.
Ответ №2:
Ты прав, @Elijah.
Я изменил его следующим образом, и теперь он работает:
class Notification
{
constructor(t: string, b: string)
{
this.Message.notification.title = t
this.Message.notification.body = b
}
Message =
{
"notification":
{
"title": "",
"body": ""
}
}
}