Astro 实现 RSS 全文输出

Astro 默认的 RSS 文件只输出摘要,像我一样喜欢使用 RSS 订阅的用户体验并不友好。其实 Astro 实现 RSS 全文输出非常简单,只需要使用 markdown-it 解析并使用 sanitize-html 渲染即可,现在我展示一下简单的实现步骤(本步骤渲染内容含<img>等任何额外标签):

安装以下两个包

npm install markdown-it
npm install sanitize-html

修改主题文件

import rss from '@astrojs/rss';
import {site} from "../consts";
import {getCollection} from "astro:content";
import sanitizeHtml from 'sanitize-html';
import MarkdownIt from 'markdown-it';
const parser = new MarkdownIt();

export async function GET(context) {
  const blog = (await getCollection('blog')).filter(({data}) => {
    return import.meta.env.PROD ? !data.draft : true
  });
  return rss({
    title: site.title,
    description: site.description,
    site: site.url,
    trailingSlash: false, // 移除尾部斜杠
    customData: `<language>zh-cn</language>`, // 指定语言
    items: blog.map((post) => ({
      title: post.data.title,
      pubDate: post.data.date,
      description: post.data.description? post.data.description : post.body.substring(0, 140).replace(/#/gi, "") + "...",
      link: `/blog/${post.slug}/`,
      content: sanitizeHtml(parser.render(post.body), {
        allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img'])
      }),
      ...post.data,
    })),
  });
}

搞定,刷新一下rss.xml页面试试吧!