From 4d2d85380892963c55569fc50b58333c910e1b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fe=CC=81lix=20Pe=CC=81ault?= Date: Sun, 22 Mar 2020 17:30:58 +0100 Subject: [PATCH] Add sitemap route Adds routes and locations to sitemap.xml file --- src/routes/sitemap.xml.js | 55 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/routes/sitemap.xml.js diff --git a/src/routes/sitemap.xml.js b/src/routes/sitemap.xml.js new file mode 100644 index 0000000..d6b786a --- /dev/null +++ b/src/routes/sitemap.xml.js @@ -0,0 +1,55 @@ +const fs = require('fs') +const fetch = require('node-fetch') +import { apiEndpoints } from '../utils/store' + + +// Variables +let BASE_URL +const pages = [''] + +// Get each route +fs.readdirSync('./src/routes').forEach(file => { + const filename = file.split('.')[0] + if (!file.startsWith('.') && !filename.startsWith('_') && ['sitemap', 'index', 'location', 'viewer'].indexOf(filename) === -1) { + pages.push(filename) + } +}) + +// Render function +const render = (pages, locations) => { + console.log(locations) + + return ` + + ${pages.map(page => ` + + ${BASE_URL}/${page} + 0.75 + `).join('\n')} + + ${locations.map(loc => ` + + ${BASE_URL}/location/${loc.country.slug}/${loc.slug} + 1 + `).join('\n')} +` +} + +// Get function +export async function get (req, res, next) { + BASE_URL = `http${(req.httpVersion >= 2) ? 's' : ''}://${req.headers.host}` + + // Get locations + const locationsReq = await fetch(`${apiEndpoints.rest}/items/locations?fields=slug,country.slug`) + const locations = await locationsReq.json() + + res.setHeader('Cache-Control', `max-age=0, s-max-age=${600}`) // 10 minutes + res.setHeader('Content-Type', 'application/rss+xml') + + const sitemap = render(pages, locations.data) + res.end(sitemap) +}