Использование изображений из Google Street View API Stati c без раскрытия ключа - PullRequest
0 голосов
/ 01 апреля 2020

Это мой первый вопрос о переполнении стека, поэтому go просто для меня!

Я пытаюсь включить изображения Street View в приложение React. Вот документация по API: Stati View Stati c API

Когда я делаю простой запрос на выборку в Google, я получаю ответ, который содержит URL-адрес изображения улицы в виде файл JPG:

bodyUsed:false
headers:Headers
ok:true
redirected:false
size:0
status:200
statusText:"OK"
Symbol(Body internals):Object {body: PassThrough, disturbed: false, error: null}
Symbol(Response internals):Object {url: "https://maps.googleapis.com/maps/api/streetview?lo…", status: 200, statusText: "OK", …}
timeout:0
// URL BELOW HERE IS WHAT I'M USING
url:"https://maps.googleapis.com/maps/api/streetview?location=3737%20N%20Southport%20Ave,%20Chicago,%20IL%2060613&key={MY_SECRECT_KEY}&size=300x300"

Я не могу использовать этот URL-адрес изображения непосредственно в своем приложении, поскольку он содержит мой секретный ключ API.

Сейчас я пытаюсь использовать AWS лямбда-функция, которая использует Node для считывания файла изображения с URL-адреса, а затем отправляет этот файл изображения в виде HTTP-ответа клиентскому приложению реакции.

У меня проблемы с выяснением, как это сделать в Узел. Я видел в сети код об использовании функции Node * readFile из модуля файловой системы . Но я не могу заставить его работать.

Вот код в моей лямбда-функции.:


const fetch = require('node-fetch');

const fs = require('fs');

const autoCompURL = "https://maps.googleapis.com/maps/api/streetview?"

const { G_PLACES_KEY } = process.env

const key = `&key=${G_PLACES_KEY}`

const size = "&size=300x300"

function getSearch(e) {
    const resp = JSON.parse(e.body)
      return resp.place_address
}

async function googleResults(str) {
    const response = await fetch(
        `${autoCompURL}location=${str}${key}${size}`
    )

    return new Promise(resolve => resolve(response));
}

exports.handler = async function(event, context) {
  try {
    const userSearch = getSearch(event)

    const autoResults = await googleResults(userSearch)

    const imgURL = autoResults.url

    const img = await fs.promises.readFile(imgURL)

    if (autoResults.status !== "OK") {
      // NOT res.status >= 200 && res.status < 300
      return { statusCode: autoResults.status, body: autoResults.statusText, error_message: autoResults.error_message }
    }

    return {
      statusCode: 200,
      headers: {'Content-Type': 'image/jpeg'},
      body: img
    }
  } catch (err) {
    console.log(err) // output to netlify function log
    return {
      statusCode: 500,
      body: JSON.stringify({ msg: err.message }) // Could be a custom message or object i.e. JSON.stringify(err)
    }
  }
}

Цените любые подсказки о том, как я могу заставить это работать!

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