Firebase云函数打字稿ReferenceError:未定义google

时间:2018-06-23 10:46:49

标签: typescript firebase google-maps google-maps-api-3 google-cloud-functions

我有一个云功能,该功能向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 :(得分:1)

您尝试将NodeJs client library用于Google Maps Web服务。

请注意,google.maps.LatLng对象未在NodeJs库中定义,该对象在Google Maps JavaScript API v3中定义,您可以在客户端使用它。在根据github文档的NodeJs客户端库中,您可以将以下对象用作LatLng对

  

经度和纬度对。 API方法接受以下任一方法:

     
      
  • [纬度,经度]的两个项目的数组;
  •   
  • 用逗号分隔的字符串;
  •   
  • 具有'lat','lng'属性的对象;或
  •   
  • 具有“纬度”,“经度”属性的对象。
  •   

来源:https://googlemaps.github.io/google-maps-services-js/docs/LatLng.html

由于函数中的location具有属性latitudelongitude,您可以直接在

中使用它
 const result = await googleMapsClient.reverseGeocode({ latlng: location }).asPromise()

请注意,要解析坐标以进行寻址,必须使用reverseGeocode()方法。 geocode()方法用于将地址字符串解析为坐标。

我希望这会有所帮助!