Firebase облачные функции машинопись ReferenceError: Google не определен - PullRequest
0 голосов
/ 23 июня 2018

У меня есть облачная функция, которая отправляет запрос в Google Map API для получения информации о местоположении геокодирования из latlng.когда я делаю запрос, он показывает эту ошибку в журналах ReferenceError: google is not defined at /user_code/lib/file_name Я не знаю, в чем причина этого, и я добавил набранный пакет в файл package.json.

package.json

{
  "name": "functions",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "tsc",
    "serve": "npm run build && firebase serve --only functions",
    "shell": "npm run build && firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "main": "lib/index.js",
  "dependencies": {
    "@google/maps": "^0.4.6",
    "@types/googlemaps": "^3.30.10",
    "firebase-admin": "^5.12.1",
    "firebase-functions": "^1.0.4",
    "nodemailer": "^4.6.4",
    "twilio": "^3.16.0"
  },
  "devDependencies": {
    "tslint": "^5.10.0",
    "typescript": "^2.9.2"
  },
  "private": true
}

Функция загрузки информации о местоположении

async function getAddressFromLatAndLang(location) {
  const maps = require('@google/maps')
  const googleMapsClient = maps.createClient({
    key: 'API_KEY',
    Promise: Promise
  });

  const latlng = new google.maps.LatLng(location.latitude, location.longitude)
  const result = await googleMapsClient.geocode({ latlng: latlng }).asPromise()
  console.log(result)
}

1 Ответ

0 голосов
/ 25 июня 2018

Вы пытаетесь использовать клиентскую библиотеку NodeJs для веб-сервисов Google Maps.

Обратите внимание, что объект google.maps.LatLng не определен в библиотеке NodeJs, этот объект определен в JavaScript Google MapsAPI v3, который вы можете использовать на стороне клиента.В клиентской библиотеке NodeJs в соответствии с документацией github вы можете использовать следующие объекты в качестве пары LatLng

Пара широты и долготы.Методы API принимают либо:

  • массив из двух элементов [широта, долгота];
  • строка, разделенная запятыми;
  • объект с 'latсвойства ',' lng ';или
  • объект со свойствами 'широта', 'долгота'.

источник: https://googlemaps.github.io/google-maps-services-js/docs/LatLng.html

Поскольку location в вашей функции имеетсвойства latitude и longitude вы можете использовать непосредственно в

 const result = await googleMapsClient.reverseGeocode({ latlng: location }).asPromise()

Обратите внимание, что для разрешения координат по адресу вы должны использовать метод reverseGeocode().Метод geocode() служит для преобразования адресной строки в координаты.

Надеюсь, это поможет!

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