Делая удаленный запрос к Google Places API через Express, каждый раз извлекает дублирующиеся результаты - PullRequest
0 голосов
/ 10 декабря 2018

Я пытался получить результаты поиска с помощью текстового запроса с помощью API мест Google.

Моя строка URL-адреса

https://maps.googleapis.com/maps/api/place/textsearch/json?query=${textQuery}&&location=${lat},${lng}&radius=10000&key=${key}

GET-запрос от браузера работает отлично.

https://maps.googleapis.com/maps/api/place/textsearch/json?query=saravana stores&&location=13.038063,80.159607&radius=10000&key=${key}

Приведенный выше поиск извлекает результаты, относящиеся к запросу.

https://maps.googleapis.com/maps/api/place/textsearch/json?query=dlf&&location=13.038063,80.159607&radius=10000&key=${key}

Этот поиск также извлекает результаты, относящиеся к dlf.

Но, когда я пытался сделатьто же самое через экспресс-сервер, он дает мне те же результаты поиска для разных запросов.

app.get('/findPlaces', (req, res) => {
  SEARCH_PLACES = SEARCH_PLACES.replace("lat", req.query.lat);
  SEARCH_PLACES = SEARCH_PLACES.replace("lng", req.query.lng);
  SEARCH_PLACES = SEARCH_PLACES.replace("searchQuery", req.query.search);

  https.get(SEARCH_PLACES, (response) => {
    let body = '';
    response.on('data', (chunk) => {
        body += chunk;
    });
    response.on('end', () => {
        let places = JSON.parse(body);
        const locations = places.results;
        console.log(locations);
        res.json(locations);
    });
  }).on('error', () => {
    console.log('error occured');
  })
});

Со стороны клиента, если я сделаю свой первый запрос к /findPlaces?lat=13.038063&lng=80.159607&search=saravana stores, я получу правильные результаты.Когда я пробовал другой поиск, например [search=dlf], он дает мне те же результаты, которые я получил от [search=saravana stores].Я даже пытался искать разные лат с другим поиском запроса.

Однако при перезапуске моего сервера узлов будут получены правильные результаты.Практически я не могу перезапустить сервер для каждого нового запроса.

Я что-то упустил?Пожалуйста, помогите.

Спасибо.

1 Ответ

0 голосов
/ 11 декабря 2018

Проблема в том, что вы заменяете глобальную переменную SEARCH_PLACES первым запросом.После этого вы не сможете снова заменить заполнители, поскольку они уже были заменены в этой строке.

Пример, когда приложение запускается SEARCH_PLACES, имеет следующее значение:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=searchQuery&location=lat,lng&radius=10000

ПослеПри первом запросе глобальная переменная будет изменена на:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=foo&location=13,37&radius=10000

Когда поступит второй запрос, в строке больше не будет заполнителя для замены, и, таким образом, последний запрос будет возвращен снова.


Вы хотите создать URL-адрес без изменения глобального URL-адреса для каждого запроса:

const SEARCH_PLACES = 'https://maps.googleapis.com/maps/api/place/textsearch/json'

app.get('/findPlaces', (req, res) => {
  const { lat, lng, search } = req.query
  let url = `${SEARCH_PLACES}?query=${search}&location=${lat},${lng}`

  https.get(url, (res) => {
    // ...
  })
})
...