export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const siteUrl = config.public.siteUrl || 'https://example.com'
// Detect locale from path
const locale = 'en'
// Fetch published blog posts
const posts = await serverQueryContent(event, `${locale}/blog`)
.where({ draft: { $ne: true } })
.sort({ date: -1 })
.find()
const escapeXml = (str: string) => {
return str
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''')
}
const rssItems = posts
.map((post) => {
const link = `${siteUrl}${post._path}`
const pubDate = new Date(post.date).toUTCString()
return `
-
${escapeXml(post.title)}
${escapeXml(link)}
${escapeXml(link)}
${pubDate}
${escapeXml(post.description || '')}
`
})
.join('')
const rss = `
Blog - ${escapeXml(config.public.siteName || 'My Site')}
${siteUrl}/blog
Latest blog posts
${locale}
${rssItems}
`
event.node.res.setHeader('Content-Type', 'application/rss+xml; charset=utf-8')
return rss
})