es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Nodejs fastify: una ruta para hacer dos llamadas http. En Nodejs, con el uso de Fastify, puedes implementar una sola ruta que realice dos llamadas http. Here is a possible translation in Spanish: Fastify en Nodejs: una ruta para realizar dos llamadas http. En Nodejs, utilizando Fastify, puedes implementar una sola ruta que realice dos llamadas http.

Soy nuevo en fastify y nodejs.
Me gustaría crear una ruta que me permita obtener la información de la película número 1 gracias a la API de themoviedb.

Primero, tengo que obtener la primera película que devuelve la ruta ‘https://api.themoviedb.org/3/discover/movie’
luego obtener la información de la película utilizando la ruta movie / id de themoviedb.

Intenté hacer esto:

import fastify from 'fastify';
import dotenv from 'dotenv'
dotenv.config();
import got from 'got';

const app = fastify();
app.get('/movies/top1', async (request, reply) => {
  let response;
  try {
    response = await got('https://api.themoviedb.org/3/discover/movie?api_key='+process.env.API_KEY+'&sort_by=vote_average.asc');
  } catch (err) {
    console.log(err)
  }
  let responseMovie;
  try {
    responseMovie = await got('https://api.themoviedb.org/3/movie/'+ response.body.results[0].id +'?api_key='+process.env.API_KEY);
  } catch (err) {
    console.log(err)
  }
  reply.send(responseMovie.body);
});
app.listen(8000);

Pero tengo un error “Cannot read properties of undefined (reading ‘0’)”
Me gustaría ejecutar la segunda solicitud cuando la primera haya terminado y devolver el resultado de la segunda solicitud.
¿Cómo puedo hacer esto, por favor?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para ejecutar la segunda solicitud solo después de que la primera solicitud se haya completado correctamente, puedes utilizar funciones async/await en JavaScript. Aquí tienes un ejemplo de código actualizado que utiliza async/await:

    import fastify from 'fastify';
    import dotenv from 'dotenv'
    dotenv.config();
    import got from 'got';
    
    const app = fastify();
    app.get('/movies/top1', async (request, reply) => {
      try {
        const response = await got('https://api.themoviedb.org/3/discover/movie?api_key='+process.env.API_KEY+'&sort_by=vote_average.asc');
        const responseMovie = await got('https://api.themoviedb.org/3/movie/'+response.body.results[0].id+'?api_key='+process.env.API_KEY);
        reply.send(responseMovie.body);
      } catch (e) {
        console.error(e);
        reply.status(500).send('Error interno del servidor');
      }
    });
    app.listen(8000);
    

    En este ejemplo de código, se utiliza la biblioteca “got” para hacer solicitudes HTTP. Definimos una función asíncrona para el manejador de la ruta principal utilizando la palabra clave “async”. Dentro de esta función, realizamos la primera solicitud y luego esperamos el resultado utilizando “await”. Esto nos permite esperar a que la primera solicitud se complete antes de hacer la segunda solicitud.

    Una vez que tenemos ambas respuestas, enviamos el cuerpo de la segunda respuesta de vuelta al cliente utilizando el método “reply.send”.

    Si alguna de las solicitudes falla, capturamos el error y devolvemos un código de estado de error 500 utilizando “reply.status”.

Comments are closed.