node.js: error de ruta rápida 503 cuando se llama desde el lado del cliente en modo de producción

CorePress2024-01-25  9

Soy nuevo en nodejs y express y tengo una ruta express simple configurada de la siguiente manera

const express = require("express");
const fetch = require("node-fetch");
require("dotenv").config();

const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.get("/api/test", function (request, response) {
  response.send("Hello World!"); // this works when I try from url as www...com/api/test
});

app.get("/api/fetchData", function (req, res) {  // this doesn't work on production 

  fetch(process.env.API_ROUTE, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ 
      query: `...`   // graphql
    }),
  })
    .then((body) => {
      return body.json();
    })
    .then((data) => res.send(data))
    .catch((err) => {
      console.log(err);
    });
});


if (process.env.NODE_ENV === "production") {
  app.use(express.static("client/build"));
}

const PORT = process.env.PORT || 8080;
console.log(`Listening on PORT ${PORT}`);

app.listen(PORT);

Y estoy llamando a /api/fetchData desde mi lado cliente como

useEffect(() => {
 axios
      .get("/api/fetchData")
      .then(...)
  }, []);

y funciona bien en localhost (con "proxy": "...:8080" en mi paquete.json). Pero cuando implemento mi aplicación en heroku, los datos de la API no aparecen. Revisé la pestaña de consola y red, la URL de solicitud es https://myapp.herokuapp.com/api/fetchData y muestra Error al cargar el recurso: el servidor respondió con un estado de 503 (Servicio no disponible) en mi consola. He estado intentando solucionarlo pero no encontré ninguna solución. ¿Me falta agregar algo o qué estoy haciendo mal aquí?

También revisé los registros de Heroku y hay el mismo error en mi registro, pero no tengo idea de cómo resolverlo

2021-03-28T07:59:59.824758+00:00 heroku[enrutador]: at=código de error=H12 desc="Solicitar tiempo de espera" método=OBTENER ruta="/api/fetchData" host=myapp.herokuapp.com request_id=89d4dd86-890c-4722-9abc-0d058c343073 fwd="210.14.110.62" dyno=web.1 conectar=0ms servicio=30000ms estado=503 bytes=0 protocolo=https



------------------------------------

El código de error H12 de Heroku significa que la solicitud tardó más de 30 segundos en completarse (como se indica en sus documentos: https://devcenter.heroku.com/articles/error-codes#h12-request-timeout) Algo dentro de tu lógica está tomando demasiado tiempo. Quizás esté intentando acceder a un recurso que está disponible¿localmente pero no en tu entorno heroku?

1

Gracias por la sugerencia, en mi caso fue por un error diferente.

- Kaung Khant Zaw

28 de marzo de 2021 a las 11:59



------------------------------------

Pensé que era porque estaba usando API_ROUTE como variable env en mi local pero no declaré esa variable en mi plataforma heroku. Pero no sé por qué la URL de solicitud en la pestaña de red estámostrando https://myapp.herokuapp.com/api/fetchData que no lo es. Hice heroku config:set API_ROUTE=myurl en mi comando y funciona bien.

2

Impresionante. ¡Marca tu respuesta como la correcta para ayudar a cualquier otra persona en el futuro que pueda tener el mismo problema!

 necesita_saber_ahora

28/03/2021 a las 12:07

Gracias, lo marcaré tan pronto como termine el tiempo de reutilización.

- Kaung Khant Zaw

28/03/2021 a las 12:47

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare