Necesito visitar las URL de paginación para obtener cada elemento de la lista en ellas y obtener todas las listas en una gran variedad de objetos para poder renderizar previamente en getStaticPaths() . Después de pensarlo un poco, decidí usar el bucle for(..) . Dado que la cadena de consulta solo solicita el número de página en la URL, decidí que sería la solución correcta.
Mi código:
export async function getStaticPaths() { let bookPages = []; for (let pageNo = 1; pageNo=5; pageNo ++) { const res = await axiosInstance.get(`/?page=${pageNo}`); const resultsList = await res.data.results; bookPages.push(resultsList); } const paths = bookPages.map((book) => ({ params: { id: book.id.toString() }, })) return { paths, fallback: false } } Son solo 5 páginas y no se añadirán nuevos datos. Cada respuesta de resultado contiene una matriz que tiene una lista de 30 objetos. Quiero colocar los 30 objetos por URL en una gran matriz llamada bookPages , con un total de 150 objetos en la matriz, y usarlo para devolver rutas.
Al compilar, Nextjs recopila datos de la página durante 60 segundos, luego se ejecuta nuevamente ya que no puede recopilar los datos y arroja este error:
> Build error occurred Error: Collecting page data for /book/[id] is still timing out after 2 attempts. See more info here https://nextjs.org/docs/messages/page-data-collection-timeoutPero si solicito solo la primera página, se construye correctamente.
export async function getStaticPaths() { const res = await axiosInstance.get('/?page=1'); const resultsList = await res.data.results; const paths = resultsList.map((book) => ({ params: { id: book.id.toString() }, })) return { paths, fallback: false } }Actualizar:
Probé con Promise.all() de esta manera pero falló la compilación:
let bookPages = []; let links = []; for (let paginate=1; paginate=5; paginate++) { links.push(`${process.env.NEXT_PUBLIC_URL}?page=${paginate}/`); } let requests = links.map(url => axios.get(url)); Promise.all(requests) .then(responses => responses.forEach( response => bookPages.push(response.data.results) )); const paths = bookPages.map((book) => ({ params: { id: book.id.toString() }, }))