🗄️ SQLite(bun:sqlite)
内置 SQLite 支持,无需安装依赖。
typescript
import { Database } from "bun:sqlite";
const db = new Database("app.db");
// 创建表
db.run(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
)
`);
// 插入
db.run("INSERT INTO users (name, email) VALUES (?, ?)", ["Alice", "alice@example.com"]);
// 查询
const users = db.query("SELECT * FROM users").all();
const user = db.query("SELECT * FROM users WHERE id = ?").get(1);
// 关闭
db.close();
🐘 PostgreSQL / MySQL
typescript
// PostgreSQL
const sql = Bun.sql("postgresql://user:pass@localhost/db");
const users = await sql`SELECT * FROM users`;
const user = await sql`SELECT * FROM users WHERE id = ${1}`;
// 插入
await sql`INSERT INTO users (name) VALUES (${"Alice"})`;
// MySQL
const mysql = Bun.sql("mysql://user:pass@localhost/db");
const results = await mysql`SELECT * FROM users`;
🔴 Redis
typescript
const redis = Bun.redis("redis://localhost:6379");
// 基础操作
await redis.set("key", "value");
const value = await redis.get("key");
// 带过期
await redis.set("session", "data", { ex: 3600 }); // 1 小时过期
// 其他命令
await redis.del("key");
await redis.incr("counter");
await redis.lpush("list", "item");
await redis.publish("channel", "message");
☁️ S3 存储
typescript
const s3 = new Bun.S3({
accessKeyId: "your-key",
secretAccessKey: "your-secret",
bucket: "my-bucket",
region: "us-east-1",
});
// 上传
await s3.write("file.txt", "Hello World");
// 下载
const content = await s3.file("file.txt").text();
// 列出文件
const files = await s3.list({ prefix: "uploads/" });
// 删除
await s3.delete("file.txt");
📝 HTMLRewriter
高性能 HTML 解析和重写。
typescript
const rewriter = new HTMLRewriter()
.on("h1", {
element(el) {
el.setInnerContent("Modified Title");
},
})
.on("a[href]", {
element(el) {
el.setAttribute("target", "_blank");
},
});
const response = new Response("Original
Link");
const modified = rewriter.transform(response);
const html = await modified.text();
🌐 FFI(外部函数接口)
调用 C/C++ 动态库。
typescript
import { dlopen, FFIType } from "bun:ffi";
const lib = dlopen("./libmylib.so", {
add: {
args: [FFIType.int, FFIType.int],
returns: FFIType.int,
},
});
const result = lib.symbols.add(1, 2); // 3