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
页面试试吧!