id: 4a4f74ea360c4147900090b3dc4be97f
parent_id: 
item_type: 1
item_id: 755c31a576b545f7a9117a63cb890ac9
item_updated_time: 1764345638345
title_diff: "[{\"diffs\":[[1,\"Cloudflare 上的Serverless：Worker + D1数据库组合教程\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":42}]"
body_diff: "[{\"diffs\":[[1,\"<html>\\\r\\\n<head>\\\r\\\n  <title>Cloudflare 上的Serverless：Worker + D1数据库组合教程</title>\\\r\\\n  <basefont face=\\\"微软雅黑\\\" size=\\\"2\\\" />\\\r\\\n  <meta http-equiv=\\\"Content-Type\\\" content=\\\"text/html;charset=utf-8\\\" />\\\r\\\n  <meta name=\\\"exporter-version\\\" content=\\\"YXBJ Windows/608924 (zh-CN, DDL); Windows/10.0.0 (Win64); EDAMVersion=V2;\\\"/>\\\r\\\n  <meta name=\\\"content-class\\\" content=\\\"yinxiang.peso.superNote\\\"/>\\\r\\\n  <meta name=\\\"application-data:yinxiang.noteLayout\\\" content=\\\"{\\\"lineSpace\\\":\\\"recommend\\\",\\\"paragraphSpace\\\":\\\"recommend\\\"}\\\"/>\\\r\\\n  <style>\\\r\\\n\\tbody, td {\\\r\\\n\\t  font-family: 微软雅黑;\\\r\\\n\\t  font-size: 12pt;\\\r\\\n\\t}\\\r\\\n  </style>\\\r\\\n</head>\\\r\\\n<body>\\\r\\\n<a name=\\\"44863\\\"></a>\\\r\\\n<h1>Cloudflare 上的Serverless：Worker + D1数据库组合教程</h1>\\\r\\\n\\\r\\\n<div><span style=\\\"\\\"><div style=\\\"max-width: 700px;\\\"><p></p><div style=\\\"--en-blockquote: true; box-sizing: border-box; border-left: 3px solid #b4c0cc; background-position: initial initial; background-repeat: initial initial;\\\"><div>原文链接: <a href=\\\"https://mp.weixin.qq.com/s?__biz=MzU3NzA5MDUwOA==&amp;mid=2247484855&amp;idx=1&amp;sn=5e2f2d93d0ff6419da0ff0fbaa08d0ee&amp;chksm=fce109db9312a8b15ad9e2485ceba821a12c765553fd88ebf41b4d7d30367004b26406e08508&amp;mpshare=1&amp;scene=1&amp;srcid=0720fZ1oOuJTbj49v5DMnq0q&amp;sharer_shareinfo=247bef64c9879016a7b5026688d5aea1&amp;sharer_shareinfo_first=247bef64c9879016a7b5026688d5aea1#rd\\\"><span>https://mp.weixin.qq.com/s?__biz=MzU3NzA5MDUwOA==&amp;mid=224748...</span></a></div></div><p></p><div style=\\\"\\\"><div><div><div><span style=\\\"\\\">原创</span><span> 某鸟 </span><span><a style=\\\"\\\"> 某鸟碎碎 </a></span><span><em></em></span></div><div style=\\\"\\\"><div><div style=\\\"text-indent: 2em;\\\"><span>上一篇文章我们用Cloudflare Worker实现了镜像网站（<a href=\\\"https://mp.weixin.qq.com/s?__biz=MzU3NzA5MDUwOA==&amp;mid=2247484790&amp;idx=1&amp;sn=02d74dc5e4d87bdad2d5c1691745593f&amp;scene=21#wechat_redirect\\\" style=\\\"\\\" target=\\\"_blank\\\">Cloudflare Worker 实战：域名DNS托管 + 快速搭建私有 GitHub 镜像加速访问</a>）。让我们继续玩转 Cloudflare 的</span><span>免费服务</span><span>！这次我们用 Cloudflare 的轻量级数据库 D1 让 Worker 获得持久化能力！</span></div><div style=\\\"text-indent: 2em;\\\"><span>先设定一个简单的需求：实现一个基于IP的访问次数记录工具。</span></div><div style=\\\"text-indent: 0px; text-align: center; font-size: 24px;\\\"><span><span style=\\\"color: rgb(255, 165, 0); font-weight: bold;\\\">创建 D1 数据库和表</span></span></div><div style=\\\"text-indent: 2em;\\\"><span>Cloudflare D1数据库是一个基于 Sqlite 的轻量级在线数据库，支持标准的SQL语法进行数据操作。重点是免费额度内有 5G 的存储容量，虽然不多，但是它可以无缝绑定 Worker 实现计算存储一体化，配合合理的数据储存策略，个人使用的情况下勉强够用！</span></div><div style=\\\"text-indent: 2em;\\\"><span><span style=\\\"font-weight: bold;\\\">第一步</span>，让我们打开 Cloudflare 的D1数据库控制页面，点击右上角的 <span style=\\\"background-color: rgb(0, 82, 255); color: #000;\\\">+ 创建数据库 </span>。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/d333279d875a4d988633489a468e4307\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-align: center;\\\"><img src=\\\":/be20853be3804f1181b6572c8c2b6222\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em;\\\"><span><span style=\\\"font-weight: bold;\\\">第二步</span>，数据库创建出来后，我们需要创建一个表。这个表用来记录ip的访问时间和次数。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/46e291c3db154a04a174db2b9d097cf5\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-align: center;\\\"><img src=\\\":/d24fe0c95b6441deaafc349f454f71ee\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 0px; text-align: center; font-size: 24px;\\\"><span><span style=\\\"color: rgb(255, 165, 0); font-weight: bold;\\\">创建Work绑定 D1 数据库</span></span></div><div style=\\\"text-indent: 2em; text-align: left; font-size: 24px;\\\"><span style=\\\"\\\">我们来到 Wokers 和 Pages 的页面创建一个新的worker。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/b52953ebb09a4d1d94a72d978cb3c6fd\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>直接从Hello World开始，然后直接部署。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/a6a71722e0084b67a996b3ff28a66fe6\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>部署后打开这个新的 Worker的控制台页面，选择绑定标签下的 <span style=\\\"background-color: rgb(0, 82, 255);\\\"></span><span style=\\\"background-color: rgb(0, 82, 255); color: #000;\\\">添加绑定按钮+</span>。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/6e62c280479844648d39767c4c3ae0f8\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>然后在右侧边弹出的选择项中选择 D1 数据库，选择我们刚刚创建的数据库后再点击部署。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/b46a2d0ed7824b7b84d5e8e6e25b4f8f\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em;\\\"><span>绑定完之后是这样的：</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/5d30822fb37b41bebd04b27273b92e3e\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>点击右上角的编辑代码按钮: &lt;/&gt;，然后将操作数据库的代码填进去，下面是核心的代码片段，完整的代码可以从这里获取（可以顺手点个Sat r）：</span></div><div style=\\\"text-align: center;\\\"><span><span style=\\\"color: rgb(255, 165, 0); text-decoration: underline;\\\">https://gitee.com/luoyuan800/small_tool/blob/master/worker/ip_records.ts</span></span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/b26cc1b82fd041e2b1ab1bb9e0b87ea3\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-align: left; text-indent: 2em;\\\"><span>然后点击<span style=\\\"background-color: rgb(0, 82, 255);\\\"></span><span style=\\\"background-color: rgb(0, 82, 255); color: #000;\\\">部署</span><span style=\\\"background-color: rgb(0, 82, 255);\\\"></span>按钮完成部署。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/d00f8a5c0d0943c280c7b4bdc65068fd\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>打开Worker的设置页面，我们要绑定一个自己的域名上去（具体原因可以看这篇文章<a href=\\\"https://mp.weixin.qq.com/s?__biz=MzU3NzA5MDUwOA==&amp;mid=2247484790&amp;idx=1&amp;sn=02d74dc5e4d87bdad2d5c1691745593f&amp;scene=21#wechat_redirect\\\" style=\\\"\\\" target=\\\"_blank\\\">Cloudflare Worker 实战：域名DNS托管 + 快速搭建私有 GitHub 镜像加速访问</a>）。</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/55d19f1c2eb1454caeb56185779442c9\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-align: center;\\\"><img src=\\\":/7dc660c795d549168a7b988d17f672df\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em;\\\"><span>添加自定义域成功后，我们就可以访问到这个基于 IP 的访问记录了！</span></div><div style=\\\"text-align: center;\\\"><img src=\\\":/23f83bcd82df46dd9d5c50c9fd65dd7e\\\" type=\\\"image/png\\\" data-filename=\\\"640.png\\\" style=\\\"--en-marks: %7B%22align%22%3A%22center%22%7D; border-radius: 3px; width: auto;\\\" width=\\\"auto\\\"/></div><div style=\\\"text-indent: 2em;\\\"><span><br/></span></div><div style=\\\"text-indent: 0px; text-align: center; font-size: 24px;\\\"><span><span style=\\\"color: rgb(255, 165, 0); font-weight: bold;\\\">最后</span></span></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>我们总结一下：</span></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>Cloudflare 的Worker 可以运行脚本，处理 Http 请求，然后返回结果，比如我们这里就直接返回一段HTML， 可以直接在浏览器上查看到结果。Worker每日免费限量100000次请求。</span></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>Cloudflare 的 D1 是一个基于 Sqlite 的轻量级数据量，可以用来存储一些简单少量的数据。免费额度是总共5G的存储空间、每天5000000行读操作、100000行写操作。注意每日限量是根据行来计算的哦，不是次数！</span></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span>可以在Worker中直接绑定 D1 的实例，无需验证就可以操作数据表。二</span><span style=\\\"color: rgb(64, 64, 64); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline;\\\"><span>者的组合让Cloudflare worker 真正具备了有状态服务能力。快点来尝试一下吧！</span></span></div><div style=\\\"text-indent: 2em; text-align: left;\\\"><span><br/></span></div></div></div></div></div></div></div></span>\\\n</div></body></html>\\u0000\"]],\"start1\":0,\"start2\":0,\"length1\":0,\"length2\":9127}]"
metadata_diff: {"new":{"id":"755c31a576b545f7a9117a63cb890ac9","parent_id":"f67288c3a0be4374b5d532b5dcc3aabc","latitude":"0.00000000","longitude":"0.00000000","altitude":"0.0000","author":"","source_url":"","is_todo":0,"todo_due":0,"todo_completed":0,"source":"joplin-desktop","source_application":"net.cozic.joplin-desktop","application_data":"","order":1764348817470,"markup_language":2,"is_shared":0,"share_id":"","conflict_original_id":"","master_key_id":"","user_data":"","deleted_time":0},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2025-11-28T21:03:21.149Z
created_time: 2025-11-28T21:03:21.149Z
type_: 13