Estoy creando un foro de discusión de películas simple. El usuario tiene un perfil donde puede ingresar sus películas favoritas separadas por una coma. La ruta de back-end llama a la API de OMDB y devuelve los objetos JSON para las películas en las que se mostrarán detalles como el póster, el título y otra información aplicable.
Creé una ruta de back-end usando Express para obtener la información. Logré obtener una sola película de OMDB y devolverla como un objeto JSON en Postman.
Sin embargo, cuando trato de mapear a través de la matriz de películas favoritas, el objeto devuelto está (o parece estar) vacío.
El siguiente código realiza una solicitud de obtención a '/movies', toma el middleware auth JWT creado y una devolución de llamada asincrónica req, res.
Se declara una variable de perfil para obtener el perfil del usuario por id.
Usando Promise.all() , se establece una variable de películas para mapear a través de toda la matriz profile.favouriteFilms y para cada película, devolver la información de la solicitud OMDB y luego res.json(films.data)
router.get('/movies', auth, async (req, res) => { try { const profile = await Profile.findOne({ user: req.user.id }); const films = Promise.all( profile.favouritefilms.map((film) => axios.get( `http://www.omdbapi.com/?t=${film}&apikey=${config.get('OMDBkey')}` ) ) ); res.json(films.data); } catch (error) { console.error(error.message); res.status(500).send('Server Error'); } });Como se indicó anteriormente, la salida en Postman está vacía.
Debe manejar el resultado de Promise.all con otro método .then(). Vea abajo:
const profile = await Profile.findOne({ user: req.user.id }); const films = Promise.all( profile.favouritefilms.map((film) => axios.get( `http://www.omdbapi.com/?t=${film}&apikey=${config.get('OMDBkey')}` ) ) ).then(films => res.json(films.map(film => film.data))