最近我发现,Cloudflare居然是支持Serverless database的,而且和Worker一样是免费的!(我又火星了) 详细可见:D1官方文档

我之前一直都认为SQLite作为serverless database是很有潜力的,在读>写的小型情境下,无脑选SQLite就完事了,完全没有必要用MySQL, Mongodb, PostgreSQL等.尤其是对流量十分小,且数据写入相当不频繁的个人博客来说,每天的独立UV能有10个都算烧高香了,用MySQL非常浪费服务器资源.

所以这次依靠CF Worker + D1搭建博客的浏览计数器服务,完全就不需要自己再买一个服务器了.成本除了开发的时间,完全为0.

我之前已经用Go写了一个网站浏览量的计数器:Github Repo

但是由于CF Worker现在只支持JavaScript, Python, TypeScript, Rust,所以无法运行在Worker中.

就算用WASM也特别麻烦,还不如直接用JS重新写一版.

CF Worker supported languages

支持的语言

准备工作

Wrangler CLI

Worker有一个在线的Background,可以在网页内修改代码和调试,十分的牛逼.

Worker Background

如果想在本地写代码,也可以用Wrangler CLI

$ npx create-cloudflare@latest mooncounter --existing-script mooncounter

不过我在使用Wrangler CLI时出了点小差错:

Wrangler Error

好吧,是我太急了,要先用wrangler login登录一下Cloudflare账号.

$ npx wrangler login

Nodejs 兼容

由于Worker运行在V8环境,所以用不了node的包,但是CF为nodejs做了兼容层:Node.js compatibility

wrangler.toml 文件添加以下即可启用node兼容:

compatibility_flags = [ "nodejs_compat" ]

然后就可以修改代码中的包的导入,比如:

import path from "node:path"

不过用处基本上不大,因为只支持少量的node api,还是尽量在Worker中避免使用node环境吧.

本地调试

$ wrangler dev --remote