前面两篇文章介绍了 Cloudflare Pages,了解通过 wrangler 或控制台部署项目,最近想给自己的公众号文章生成一个 RSS 接口,一方面需要数据库,另外一方面需要一个接口。
在 Cloudflare 产品中,数据库可以选用 D1 数据库。Cloudflare Pages 虽然主要生成HTML、CSS、JS,但内置的 Functions 可以写一些接口,类似于 Node.js,在 Cloudflare Workers 中运行。
开干吧,本文全程通过 wrangler 命令行操作。
在《手把手教你使用免费Cloudflare Pages部署静态网站》这篇文章中已经使用 wrangler 部署了一个项目,其中核心的 wrangler.jsonc 文件如下:
{
"name": "my-blog",
"compatibility_date": "2026-01-13",
"pages_build_output_dir": "./dist"
}
大概的意思就是定义了项目的名称,会对应到自己的 Cloudflare Pages 项目中。
文本后续的操作会更新该文件内容。
首先使用 wrangler 创建 D1 数据库:
npx wrangler@latest d1 create rss_feeds_d1
会交互式要求要求绑定名称,代码中会引用它,最终生成 wrangler.jsonc:
{
"d1_databases": [
{
"binding": "rss_feeds",
"database_name": "rss_feeds_d1",
"database_id": ""
}
],
"name": "my-blog",
"compatibility_date": "2026-01-13",
"pages_build_output_dir": "./dist"
}
其中 rss_feeds_d1 是数据库名称,rss_feeds 是绑定名称,可以通过 wrangler.jsonc 定义绑定名称,也可以在控制台中操作。
写一个 SQL 文件,包括创建表、插入记录,schema.sql 内容如下:
DROP TABLE IF EXISTS rss_feeds_d1;
CREATE TABLE IF NOT EXISTS rss_feeds_d1 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
url TEXT UNIQUE NOT NULL,
description TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO rss_feeds_d1 (title, url, description,created_at) VALUES ('test', 'https://me.ywdblog.com', 'hello world','2024-01-01 10:00:00');
然后在 rss_feeds_d1 数据中重建表、插入记录:
npx wrangler d1 execute rss_feeds_d1 --local --file=./schema.sql
注意 --local 会在本地执行生成表和记录,先开发测试。
日后命令行查询数据:
npx wrangler d1 execute rss_feed --local --command="SELECT * FROM rss_feeds_d1"
接下去就是写 Function 代码了,所有的代码默认要放到 function 目录下,文件名就是接口名。
比如 function/rss.xml.js 对应的接口就是 /rss.xml。
内容如下:
export async function onRequest(context) {
const { env } = context;
const { results } = await env.rss_feeds
.prepare("SELECT * FROM rss_feeds_d1 ORDER BY created_at DESC Limit 10 ")
.all();
const itemsXml = results.map(item => `
<item>
<title><![CDATA[${item.title}]]></title>
<link>${item.url}</link>
<guid>${item.url}</guid>
<description><![CDATA[${item.description || ""}]]></description>
<pubDate>${new Date(item.created_at).toUTCString()}</pubDate>
</item>
`).join("");
const rssXml = `<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>虞大胆的叽叽喳喳</title>
<link>https://me.ywdblog.com</link>
<description>虞大胆的叽叽喳喳的 RSS</description>
<language>zh-cn</language>
${itemsXml}
</channel>
</rss>`;
return new Response(rssXml, {
headers: {
"Content-Type": "application/xml; charset=utf-8",
"Cache-Control": "max-age=300"
}
});
}
代码非常简单哈,然后启动测试:
npx wrangler pages dev
测试没问题后,就在正式环境中生成D1数据:
npx wrangler d1 execute rss_feeds_d1 --remote --file=./schema.sql
npx wrangler@latest d1 list
然后推送到 Cloudflare Page 上:
npx wrangler pages deploy
最后访问 https://me.ywdblog.com/rss.xml 看看效果。
相关文章:

