Почему извлечение данных в next.js с помощью жестко заданного API-ключа работает, но не с переменной среды?

Я следовал документации 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
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Что такое компоненты React? Введение в компоненты | Типы компонентов
Что такое компоненты React? Введение в компоненты | Типы компонентов
Компонент - это независимый, многократно используемый фрагмент кода, который делит пользовательский интерфейс на более мелкие части. Например, если мы...
Введение в одну из самых важных концепций в React - функциональное программирование.
Введение в одну из самых важных концепций в React - функциональное программирование.
React разработан с использованием концепции функционального программирования, поэтому понимание функционального программирования важно для изучения...
Руководство спасателя React по созданию масштабируемых приложений
Руководство спасателя React по созданию масштабируемых приложений
А, React. Это одна из самых популярных библиотек JavaScript. Ее любят за гибкость, простоту использования и, будем честны, за то, что она позволяет...
0
0
818
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно добавить NEXT_PUBLIC_ в начало вашей переменной среды, чтобы у вас был доступ к ней на стороне клиента.

Итак, внутри вашего изменения .env.local

API_KEY на NEXT_PUBLIC_API_KEY и сделайте то же самое внутри своего кода.

https://nextjs.org/docs/basic-features/environment-variables#loading-environment-variables

И ключ становиться читабельным для пользователей из браузера, к сожалению, без вариантов. Но вы можете ограничить свой ключ своим хостом/доменом в консоли Google.

JB_DELR 18.12.2020 18:12

да, проблема, когда вы вызываете API со стороны клиента, заключается в том, что вам нужно предоставить свой ключ публично. Есть и другие решения, такие как рендеринг на стороне сервера внутри nextjs (nextjs.org/docs/basic-features/data-fetching) или перемещение ваших вызовов в ваш собственный API.

Sir Codes Alot 18.12.2020 18:19

Спасибо за ответ @SirCodesAlot. Возможно ли это «перемещение ваших вызовов в ваш собственный API» с помощью функции «Маршруты API» в next.js? Я также использовал «getServerSideProps», и это работает, но когда я хочу обновить запрос внутри URL-адреса API, я не могу его обновить, потому что реквизиты getServerSide предоставляют только начальные реквизиты...

wallzry 19.12.2020 09:45

МОЕ РЕШЕНИЕ: использование «белого списка доменов», который предоставляется ЗДЕСЬ и NEXT_PUBLIC_, как предложено @SirCodesAlot. Спасибо😀

wallzry 19.12.2020 16:00

Другие вопросы по теме