Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

210
Visualizações
¿Cómo evitar la duplicación de API al obtener datos con nextjs?

Tengo una ruta a la que puedo llamar desde la representación del lado del servidor o desde el cliente:

 export const getFooBar = async (): Promise<any> => { const res = await fetch(`/foo/bar`, { method: 'GET', headers: CONTENT_TYPE_JSON, }) if (!res.ok) { //do something } //do something else }

Si llamo a esta función desde el servidor:

 export const getServerSideProps: GetServerSideProps = async () => { getFooBar().then(() => { //do something }) }

Recibí un error porque no es una URL absoluta. La solución es crear otra función con un URI ligeramente diferente:

 export const getFooBar = async (): Promise<any> => { const res = await fetch(`http://myapp/foo/bar`, { method: 'GET', headers: CONTENT_TYPE_JSON, }) if (!res.ok) { //do something } //do something else }

O para pasar un argumento de URL de prefijo en getFooBar .

Pero, ¿existe una forma más genérica de agregar la parte de URL absoluta si proviene de la representación del lado del servidor?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

El proxy que configuró en next.config.js solo es relevante para las solicitudes del lado del cliente. Para las solicitudes iniciadas en el servidor (como dentro getServerSideProps ), debe llamar directamente a la API externa.

Dado que la variable de entorno APP_API no está expuesta al navegador (no tiene el prefijo NEXT_PUBLIC_ ), puede usar eso como una condición para usar el punto final directo de la API en el servidor o apuntar al punto final del proxy en el cliente.

 export const getFooBar = async (): Promise<any> => { const url = process.env.APP_API ? `http://${process.env.APP_API}/bar` : '/foo/bar' const res = await fetch(url, { method: 'GET', headers: CONTENT_TYPE_JSON, }) // Remaining code }

Tenga en cuenta que también podría usar otras condiciones para verificar si está en el cliente o en el servidor, por ejemplo, usando typeof window === 'undefined' .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda