Skip to content

Commit 3671ac5

Browse files
fix: refine RSS feed item processing to exclude dynamic routes and ensure correct URL construction
1 parent 4815d55 commit 3671ac5

File tree

1 file changed

+18
-19
lines changed

1 file changed

+18
-19
lines changed

src/pages/rss.xml.js

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,26 @@ import rss, { pagesGlobToRssItems } from '@astrojs/rss';
22
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
33

44
export async function GET(context) {
5-
// Get the raw site URL from context (ensure it's a string) and remove any trailing slash.
5+
// Ensure context.site is a string and remove any trailing slash.
66
const rawSite = typeof context.site === 'string' ? context.site : context.site.href;
77
const trimmedSite = rawSite.replace(/\/$/, '');
8-
9-
// Our configured base path from astro.config.mjs
108
const basePath = '/cookbook/';
11-
// Construct the full site URL (e.g., "https://nicholasdbrady.github.io/cookbook/")
9+
// Construct the full site URL: "https://nicholasdbrady.github.io/cookbook/"
1210
const fullSiteUrl = trimmedSite + basePath;
1311

14-
// Use pagesGlobToRssItems() to automatically generate RSS items from your blog pages.
15-
// This assumes your published blog pages live in src/pages/blog/.
16-
let items = await pagesGlobToRssItems(import.meta.glob('./blog/*.{astro,md,mdx}'));
12+
// Use a glob pattern array to include only blog pages and exclude the dynamic route file.
13+
let items = await pagesGlobToRssItems(
14+
import.meta.glob([
15+
'./blog/*.{astro,md,mdx}',
16+
'!./blog/[...slug].astro'
17+
])
18+
);
1719

18-
// Filter out the dynamic route file (i.e. [...slug].astro) which doesn't have its own frontmatter.
19-
items = items.filter(item => !item.file.includes('[...slug]'));
20-
21-
// Post-process each item so that its link and guid are built from the fullSiteUrl.
20+
// Post-process each item so that its link and guid are built correctly.
2221
items = items.map(item => {
23-
// Remove any leading slash from the item.link (if present)
22+
// Remove a leading slash from the item.link if present.
2423
const relativePath = item.link.startsWith('/') ? item.link.substring(1) : item.link;
25-
// Build the final URL using fullSiteUrl as the base.
24+
// Construct the fixed link using the fullSiteUrl as the base.
2625
const fixedLink = new URL(relativePath, fullSiteUrl).href;
2726
return {
2827
...item,
@@ -32,11 +31,11 @@ export async function GET(context) {
3231
});
3332

3433
return rss({
35-
title: SITE_TITLE, // Your feed title
36-
description: SITE_DESCRIPTION, // Your feed description
37-
site: fullSiteUrl, // Ensures the channel <link> includes the base path
38-
items, // The list of RSS items with full HTML content
39-
trailingSlash: true,
40-
customData: `<language>en-us</language>`, // Optional extra XML data
34+
title: SITE_TITLE,
35+
description: SITE_DESCRIPTION,
36+
site: fullSiteUrl, // Ensures the channel <link> includes the "/cookbook/" base.
37+
items,
38+
trailingSlash: true, // Matches your astro.config.mjs trailingSlash: "always"
39+
customData: `<language>en-us</language>`,
4140
});
4241
}

0 commit comments

Comments
 (0)