I've been trying to generate sitemaps from API for my Nextjs app by following this guide. I fetch data, put in a list like this:
const formatted = sitemap => prettier.format(sitemap, { parser: "html" });
(async () => {
const fetchInfo = await fetch(fetchUrl)
.then(res => res.json())
.catch(err => console.log(err));
const postList = [];
const totalPages = fetchInfo.total_pages
pageNumber = 1
while (pageNumber < totalPages + 1) {
const fetchposts = await fetch(fetchUrl+ `?page=${pageNumber}`)
.then(res => res.json())
.catch(err => console.log(err));
fetchposts.results.forEach(post => postList.push(post.slug));
console.log(postList);
pageNumber ++;
}
const postListSitemap = `
${postList
.map((slug,index) => {
console.log(index);
return `
<url>
<loc>${`${YOUR_AWESOME_DOMAIN}/posts/${slug}`}</loc>
<lastmod>${getDate}</lastmod>
</url>`;
})
.join("")}
`;
const generatedSitemap = `
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
>
${postListSitemap}
</urlset>
`;
const formattedSitemap = [formatted(generatedSitemap)];
fs.writeFileSync("public/sitemap-posts.xml", formattedSitemap, "utf8");
})();
First code works just fine, I also print postList
while doing it and it shows all items but then when it starts to generate the sitemap I get UnhandledPromiseRejectionWarning: RangeError: Maximum call stack size exceeded
error. I'm not good in Javascript so not sure how to fix it.