关于 blink-backend
blink-backend 是用于构建和部署 Blink 后端端点的技能,涵盖 Hono 应用结构、密钥、JWT 验证、前端调用和部署检查,适用于 Webhook、回调等服务端任务。
主要功能
- 01Hono 后端结构指南
- 02后端资格检查
- 03密钥处理指南
- 04JWT 令牌验证
- 05前端调用端点示例
- 06部署与错误排查
适用场景
- 01实现 Webhook 端点
- 02处理第三方回调
- 03避免服务器密钥暴露于前端代码
- 04部署 Blink 后端
MCP 相关
该技能列出用于检查后端状态、部署后端和查看日志的 MCP 工具:`blink_backend_status`、`blink_backend_deploy` 和 `blink_backend_logs`。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ blink-new/ blink-plugin --skill blink-backend安装后在 Claude Code 中输入/blink-backend确认已加载。
详细介绍
MCP 工具
blink_backend_status · blink_backend_deploy · blink_backend_logs
适用场景
- 优先使用 SDK 处理身份验证、数据库、存储和 AI(约 95% 的情况)
- 以下场景使用后端:Webhook、服务端密钥、第三方回调、重型处理
- 切勿仅为 CRUD 创建后端 — 改用
blink.db
开始使用
# Check backend eligibility (Pro/Max/Team)
blink backend status
# Create the entry point
mkdir -p backend
# Write backend/index.ts (see below)
# Deploy
blink backend deploy
# View logs
blink backend logs
结构
backend/
├── index.ts ← REQUIRED: export default Hono app
├── routes/
│ ├── stripe.ts
│ └── webhooks.ts
└── lib/
└── auth.ts
backend/index.ts(必需的入口点)
import { Hono } from "hono"
import { cors } from "hono/cors"
import { createClient } from "@blinkdotnew/sdk"
const app = new Hono()
app.use("*", cors())
const getBlink = (env: Record<string, string>) =>
createClient({
projectId: env.BLINK_PROJECT_ID,
secretKey: env.BLINK_SECRET_KEY, // server key, not publishableKey
})
app.get("/health", (c) => c.json({ ok: true }))
app.post("/api/example", async (c) => {
const blink = getBlink(c.env as Record<string, string>)
const body = await c.req.json()
return c.json({ success: true })
})
export default app
密钥
自动注入(切勿硬编码):BLINK_PROJECT_ID、BLINK_SECRET_KEY、BLINK_PUBLISHABLE_KEY
用户密钥(第三方密钥):通过项目设置或 CLI 添加,并通过 c.env.MY_SECRET 访问。
JWT 验证
app.post("/api/protected", async (c) => {
const blink = getBlink(c.env as Record<string, string>)
const auth = await blink.auth.verifyToken(c.req.header("Authorization"))
if (!auth.valid) return c.json({ error: auth.error }, 401)
return c.json({ userId: auth.userId })
})
从前端调用
// Direct fetch
const res = await fetch("https://{projectId8}.backend.blink.new/api/example", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ key: "value" }),
})
// Via SDK
const data = await blink.functions.invoke("api/example", { body: { key: "value" } })
projectId8 = 完整项目 ID 的最后 8 个字符。
部署流程
# 1. Check eligibility
blink backend status
# 2. Write backend/index.ts
# 3. Deploy (reads all backend/ files, bundles with esbuild, deploys to CF Workers)
blink backend deploy
# 4. URL is printed: https://{projectId8}.backend.blink.new
常见错误
| 错误 | 原因 | 修复 |
|---|---|---|
BACKEND_REQUIRES_PRO | 免费版/Starter 工作区 | 升级到 Pro+ |
MISSING_ENTRYPOINT | 没有 backend/index.ts | 使用 export default app 创建 |
| CORS 错误 | 缺少中间件 | 添加 app.use("*", cors()) |
| blink-apis 返回 401 | 密钥错误 | 使用 secretKey,而非 publishableKey |
检查清单
backend/index.ts导出default app- 已添加
app.use("*", cors()) - 在
createClient中使用secretKey(而非 publishableKey) - 使用
blink backend deploy部署 - 所有外部
fetch()调用均设置 AbortController 超时
评论
支持 Markdown