Неопределенное свойство json - PullRequest
0 голосов
/ 16 апреля 2019

Я использую Firebase Cloud Functions и использую его только для отправки уведомлений, поэтому я хотел создать класс, чтобы упростить создание этих уведомлений (json-подобных объектов), но при доступе к свойству этого json-как и объект, он возвращает неопределенное значение.

Класс выглядит следующим образом:

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
        }
    }
}

При непосредственном доступе к переменной заголовка возвращается правильное значение, например:

let newNotification = new Notification("TITLE", "BODY")
console.log(newNotification.title) // logs -> TITLE

Но при доступе к заголовку сообщения возвращается неопределенное:

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 ErrorError: Полезная нагрузка обмена сообщениями содержит недопустимое значение для свойства «messages.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' }

Честно говоря, я не знаю, что я делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Ты прав, @ Илия.

Я изменил это так, и теперь это работает:

class Notification 
{
    constructor(t: string, b: string)
    {
        this.Message.notification.title = t
        this.Message.notification.body = b
    }

    Message = 
    {
        "notification":
        {
            "title": "",
            "body": ""
        }
    }
}
0 голосов
/ 16 апреля 2019

Я думаю, что у вас может быть проблема с областью, с которой вызывается ваш метод уведомлений.Он не видит значения того, что вы ожидаете от этого this.title.Я также предполагаю, что если вы уроните this.title, это также даст вам нулевое значение для this.body.У метода уведомлений есть свой заголовок и тело var, и они не установлены.Я не уверен, каково это решение, так как прошло много лет с тех пор, как я делал подобные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...