googleMapsClient.geocode не является функцией - PullRequest
0 голосов
/ 26 января 2019

Я работаю над приложением Node-express

Если я сделаю что-то подобное

const googleMapsClient = require('@google/maps')

app.get("/", (req, res) => {
    googleMapsClient.createClient({
            key: 'AIzaSyASVV6mxY3pQiZKVp8',
            Promise: Promise
          });

    googleMapsClient.geocode({address: '1600 Amphitheatre Parkway, Mountain View, CA'})
            .asPromise()
            .then((response) => {
              console.log(response.json.results);
            })
            .catch((err) => {
              console.log(err);
            });
})

Код не работает и выдает googleMapsClient.geocode не является функцией

Но если я сделаю что-то подобное

router.get("/", (req, res) => {

    const googleMapsClient = require('@google/maps').createClient({
        key: 'AIzaSy3pQiZKVp8',
        Promise: Promise
      });

      googleMapsClient.geocode({address: '1600 Amphitheatre Parkway, Mountain View, CA'})
        .asPromise()
        .then((response) => {
          console.log(response.json.results);
        })
        .catch((err) => {
          console.log(err);
        });

})

Тогда код работает и не выдает ошибку.

Я ожидал, что оба кода будут одинаковыми, но, очевидно, это не так.

Кроме того, во втором фрагменте кода почему

googleMapsClient.geocode

работает и почему не работает

googleMapsClient.createClient({

И если кто-то может помочь мне предложить / структурировать этот код как модульный

1 Ответ

0 голосов
/ 26 января 2019

Как рекомендует комментатор, назначение googlemapsClient.createClient .... переменной, например ниже, работает.

const googleGeo = googleMapsClient.createClient({
        key: 'AIzaSyASVV6mxY3pQiZKVp8',
        Promise: Promise
      });

Затем для модульности вашего кода вы можете установить его в отдельном файле с помощью module.exports и импортировать функцию геокодирования в файл вашего сервера, а также исключить создание клиента, так как это выглядит немного неприглядно:

// geocode.js

    module.exports = {
       const: googleGeo = googleMapsClient.createClient({
        key: 'AIzaSyASVV6mxY3pQiZKVp8',
        Promise: Promise
      }),


      geoCode: googleGeo.geocode({'address': address})
      .asPromise()
      .then((response) => {
        console.log(response.json.results);
      })
      .catch((err) => {
        console.log(err);
      })
 }

Затем в файле вашего сервера требуется файл geocode.js и вызовите функцию:

 const googleMapsFile = require('./geocode.js');

  router.get("/", (req, res) => {
  googleMapsFile.geoCode('1600 Amphitheatre Parkway, Mountain View, CA')
  }}

Это намного чище, вы можете включить другие функции Google аналогичным образом, помните, что вы можете анализировать данные по таким параметрам, как адрес, если параметр адреса объявлен со строкой 'address' , тогда фактический адрес можно просто проанализировать.

  • У меня была такая же проблема с клиентом google maps, ему не нравилось, когда его вызывали напрямую, само по себе кажется, что его нельзя вызвать с помощью таких методов, как geocode и другие!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...