'TypeError: Невозможно инициализировать соединитель undefined: невозможно прочитать свойство' root 'из undefined' - PullRequest
0 голосов
/ 06 января 2020

Я использую loopback3.x . Я хочу интегрировать сторонние API с обратной связью. Для этого при использовании loopback-connector-rest отображается ошибка ' TypeError: Невозможно инициализировать соединитель undefined: Невозможно прочитать свойство' root 'из undefined '. Как это исправить?

Конфигурация источника данных

   "restDataSource": {
    "name": "restDataSource",
    "baseURL": "",
    "crud": true,
    "connector": "rest",
    "debug": false,
    "options": {
      "headers": {
        "accept": "application/json",
        "content-type": "application/json",
        "authorization": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
      },
      "strictSSL": false
    },
    "operations": [{
      "template": {
        "method": "POST",
        "url": "https://fcm.googleapis.com/fcm/send",
        "options": {
          "strictSSL": true,
          "useQuerystring": true
        }
      },
      "functions": {
        "notify": ["title", "text", "click_action", "keyname", "to"]
      }
    }]
  }

Ошибка

TypeError: Cannot create data source "restDataSource": Cannot initialize connector "rest": Cannot read property 'root' of undefined
    at /home/veena-msl/Documents/care-doc-api/node_modules/loopback-connector-rest/lib/rest-connector.js:93:28
    at Array.forEach (<anonymous>)
    at /home/veena-msl/Documents/care-doc-api/node_modules/loopback-connector-rest/lib/rest-connector.js:87:22
    at Array.forEach (<anonymous>)
    at Function.initializeDataSource [as initialize] (/home/veena-msl/Documents/care-doc-api/node_modules/loopback-connector-rest/lib/rest-connector.js:52:25)
    at DataSource.setup (/home/veena-msl/Documents/care-doc-api/node_modules/loopback-datasource-juggler/lib/datasource.js:493:19)
    at new DataSource (/home/veena-msl/Documents/care-doc-api/node_modules/loopback-datasource-juggler/lib/datasource.js:138:8)
    at Registry.createDataSource (/home/veena-msl/Documents/care-doc-api/node_modules/loopback/lib/registry.js:364:12)
    at dataSourcesFromConfig (/home/veena-msl/Documents/care-doc-api/node_modules/loopback/lib/application.js:570:19)
    at Function.app.dataSource (/home/veena-msl/Documents/care-doc-api/node_modules/loopback/lib/application.js:269:14)
    at /home/veena-msl/Documents/care-doc-api/node_modules/loopback-boot/lib/executor.js:191:9
    at /home/veena-msl/Documents/care-doc-api/node_modules/loopback-boot/lib/executor.js:282:5
    at Array.forEach (<anonymous>)
    at forEachKeyedObject (/home/veena-msl/Documents/care-doc-api/node_modules/loopback-boot/lib/executor.js:281:20)
    at setupDataSources (/home/veena-msl/Documents/care-doc-api/node_modules/loopback-boot/lib/executor.js:181:3)
    at execute (/home/veena-msl/Documents/care-doc-api/node_modules/loopback-boot/lib/executor.js:39:3)

1 Ответ

1 голос
/ 16 января 2020

В разделе functions вы определили функцию notify, принимающую несколько входных аргументов: title, text, click_action, keyname, to. Однако в разделе template нет никакой информации о том, как сопоставить эти аргументы с HTTP-запросом. Например, title предполагается отправлять с помощью URL-запроса или в теле запроса?

IIU C, вы пытаетесь использовать устаревший API-интерфейс Firbase Cloud Messaging HTTP, как описано здесь: https://firebase.google.com/docs/cloud-messaging/http-server-ref Основываясь на этой документации, я думаю, что все аргументы вашей функции должны быть отправлены в теле запроса.

Похоже, что соединитель REST LoopBack неправильно определяет и обрабатывает ситуацию, когда вход Аргумент не сопоставлен ни с одним источником HTTP. Это не должно быть сбой, не стесняйтесь открыть отчет об ошибке в https://github.com/strongloop/loopback-connector-rest/issues

Вот конфигурация, которая не взламывает sh сервер. У меня нет учетной записи Firebase, чтобы проверить, что она работает должным образом.

    "template": {
      "method": "POST",
      "url": "https://fcm.googleapis.com/fcm/send",
      "options": {
        "strictSSL": true,
        "useQuerystring": true
      },
      "body": {
        "title": "{title:string}",
        "text": "{text:string}",
        "click_action": "{click_action:string}",
        "keyname": "{keyname:string}",
        "to": "{to:string}"
      }
    },

Вы можете узнать больше о различных способах настройки входных аргументов в документации по соединителю: https://loopback.io/doc/en/lb3/REST-connector.html#defining -a -custom-метод-с использованием мини-шаблон

...