У меня есть API-интерфейс NodeJS / ExpressJS, который выполняет HTTP-запрос для получения JSON перед отправкой ответа. Вот фрагмент кода:
const ipApiUrl = `https://ipapi.co/${ip}/json/`
const ipApiResponse = await axios.get(ipApiUrl)
console.log(ipApiResponse.data)
ipCountryCode = ipApiResponse.data.country_code
Этот код отлично работает локально. Он также отлично работает на Heroku. Тем не менее, он НЕ работает одинаково в Google Cloud Run.
Вот что ipApiResponse.data
должно быть:
{
"ip": "141.117.117.76",
"city": "Toronto",
"region": "Ontario",
"region_code": "ON",
"country": "CA",
"country_code": "CA",
...
}
ОДНАКО, при отправке запроса из Google Cloud Run API, который я использую, возвращает что-то другое. Вместо этого я получаю ответ:
{ ip: '169.254.8.129', reserved: true }
Я думаю, что эта проблема связана либо с Google Cloud Run, либо с Docker, потому что у меня также есть проблемы с отправкой HTTP-запросов на другие сайты, такие как ipstack.com.
Я развертываю в Google Cloud Run с помощью Docker. Мой Dockerfile
использует node:10
и предоставляет переменную окружения PORT
, как сказано в документации. Все остальное работает отлично, за исключением этого HTTP-запроса. Я пробовал оба axios
и fetch
.