Это мой первый вопрос о переполнении стека, поэтому 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)
}
}
}
Цените любые подсказки о том, как я могу заставить это работать!