SuperAPI AI 工具集

astro-actions

编程与开发

查看项目

更新于 10-26 16:24

技能介绍

用途

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)——本技能聚焦请求/验证/响应边界。