Я следовал документации Next.js, поэтому создал файл с именем .env.local и сохранил внутри свой ключ API.
Когда console.info этот ключ отображается в консоли сервера, а не в консоли браузера. Пока я это понимаю.
Проблема: я хочу получить некоторые данные с заданного URL. Как я могу это сделать, не передавая свой API_KEY браузеру?
Я думаю, что эта тема довольно запутанна для новичков (как и я), и я, как и многие другие (так я думаю), были бы вне себя от радости, если бы кто-нибудь смог избавиться от путаницы.
Вот мой код: (Если я жестко запрограммирую свой API_KEY внутри URL-адреса, он отлично работает)
import Haversine from '../components/Haversine'
import LangLat from '../components/LangLat'
import axios from 'axios'
import { useEffect } from 'react'
const key = process.env.API_KEY
const index = () => {
console.info(key)
const getLangLat = async () => {
try {
const response = await axios.get(
`https://geocode.search.hereapi.com/v1/geocode?q=wimpfener str 40 backnang&apiKey=${key}`
)
console.info(response.data)
} catch (err) {
console.error(err.message)
}
}
useEffect(() => {
getLangLat()
})
return (
<div>
<Haversine />
<LangLat />
</div>
)
}
export default index
Вам нужно добавить NEXT_PUBLIC_ в начало вашей переменной среды, чтобы у вас был доступ к ней на стороне клиента.
Итак, внутри вашего изменения .env.local
API_KEY на NEXT_PUBLIC_API_KEY и сделайте то же самое внутри своего кода.
https://nextjs.org/docs/basic-features/environment-variables#loading-environment-variables
да, проблема, когда вы вызываете API со стороны клиента, заключается в том, что вам нужно предоставить свой ключ публично. Есть и другие решения, такие как рендеринг на стороне сервера внутри nextjs (nextjs.org/docs/basic-features/data-fetching) или перемещение ваших вызовов в ваш собственный API.
Спасибо за ответ @SirCodesAlot. Возможно ли это «перемещение ваших вызовов в ваш собственный API» с помощью функции «Маршруты API» в next.js? Я также использовал «getServerSideProps», и это работает, но когда я хочу обновить запрос внутри URL-адреса API, я не могу его обновить, потому что реквизиты getServerSide предоставляют только начальные реквизиты...
МОЕ РЕШЕНИЕ: использование «белого списка доменов», который предоставляется ЗДЕСЬ и NEXT_PUBLIC_, как предложено @SirCodesAlot. Спасибо😀
И ключ становиться читабельным для пользователей из браузера, к сожалению, без вариантов. Но вы можете ограничить свой ключ своим хостом/доменом в консоли Google.