用途
astro-actions 面向在 Astro 项目中使用 Astro Actions 处理表单提交、数据变更(mutations)和服务端逻辑的开发者,通过 defineAction 与 astro:actions 提供类型安全的服务端函数。技能聚焦于请求、验证、响应这一边界,覆盖从 src/actions/index.ts 结构到错误处理与重定向模式的完整动作生命周期。
主要能力
- defineAction():以类型安全方式定义服务端函数。
- Zod 验证:自动解析 JSON 与 FormData 输入,并对输入做校验。
- ActionError:提供标准化错误码与消息,HTTP 对齐的代码包括 UNAUTHORIZED、FORBIDDEN、NOT_FOUND、BAD_REQUEST、INTERNAL_SERVER_ERROR、CONFLICT、TOO_MANY_REQUESTS。
- accept 接收模式:默认 accept: 'json' 解析 JSON 请求体;accept: 'form' 直接解析 HTML FormData,支持原生表单提交。
- 渐进增强:表单在没有启用 JavaScript 时也能工作,有 JS 时得到增强。
- astro:actions 客户端导入:用于类型安全的调用。
使用方式
所有动作放在 src/actions/index.ts 中,导出 server 对象。示例:
// src/actions/index.ts
import { defineAction } from 'astro:actions';
import { z } from 'astro/zod';
export const server = {
myAction: defineAction({ /* ... */ })
}
技能内置工作流程要求:在任何实现之前并行启动 3 个 Agent,分别用 fuse-ai-pilot:explore-codebase 检查 src/actions/ 中已有动作、用 fuse-ai-pilot:research-expert 通过 Context7/Exa 核对最新 Actions 文档、用 mcp__context7__query-docs 获取 defineAction 与 ActionError 示例;实现完成后运行 fuse-ai-pilot:sniper 进行验证。
参考文档包括 overview.md(概念与架构)、defining-actions.md(defineAction 模式)、error-handling.md(ActionError 处理)、forms.md(HTML 表单集成)、progressive-enhancement.md(渐进增强),以及 templates/contact-form.md 与 templates/json-action.md 模板。
适用场景
- 需要服务端验证的表单提交。
- 需要类型安全、免去 API 样板代码的后端 mutation。
- 需要渐进增强、在无 JS 环境下仍可使用的表单。
- 用 Actions 替代 API 端点进行客户端-服务端通信。
最佳实践
- 始终定义输入 schema,不跳过 Zod 验证。
- 对已知错误使用 ActionError,便于客户端按标准码处理。
- HTML 表单使用 accept: 'form' 以支持原生提交。
- 采用渐进增强,使表单在无 JS 时可用、有 JS 时增强。
- 检查 ctx.cookies 做鉴权,未登录时抛出 UNAUTHORIZED。
限制
不深入覆盖 Astro DB 集成(数据库层由 astro-db 处理),也不覆盖 Content Layer 模式(astro-content)——本技能聚焦请求/验证/响应边界。