SuperAPI AI 工具集

astro-actions

编程与开发

查看项目

更新于 10-16 04:04

技能介绍

用途

Astro Actions 用于在 Astro 项目中处理表单提交、数据变更(mutations)以及服务器端逻辑,并提供类型安全保障。它通过 defineAction 与 astro:actions 模块,将请求、验证与响应边界统一管理,替代传统 API 端点样板代码。

主要能力

  • defineAction():类型安全的服务器函数定义。
  • Zod 验证:自动解析 JSON 与 FormData。
  • ActionError:标准化错误码与消息。
  • accept: 'form':直接支持 HTML 表单提交。
  • 渐进增强:表单在未启用 JavaScript 时仍可工作。
  • astro:actions:客户端导入,支持类型安全调用。

核心概念

Action 结构

所有 action 位于 src/actions/index.ts,并导出 server 对象:

// src/actions/index.ts
import { defineAction } from 'astro:actions';
import { z } from 'astro/zod';

export const server = {
  myAction: defineAction({ /* ... */ })
}

接受模式(Accept Modes)

模式 说明
accept: 'json'(默认) 解析 JSON 请求体
accept: 'form' 直接解析 HTML FormData

错误码

标准 HTTP 对齐错误码:UNAUTHORIZED、FORBIDDEN、NOT_FOUND、BAD_REQUEST、INTERNAL_SERVER_ERROR、CONFLICT、TOO_MANY_REQUESTS。

使用方式

何时使用

  • 处理带服务器端验证的表单提交
  • 创建类型安全的后端变更,无需 API 样板代码
  • 构建渐进增强(无 JS 也可工作)
  • 替代 API 端点进行客户端-服务器通信

参考指南

需求 参考
概念与架构 overview.md
defineAction 模式 defining-actions.md
ActionError 处理 error-handling.md
HTML 表单集成 forms.md
渐进增强 progressive-enhancement.md
联系表单模板 templates/contact-form.md
JSON action 模板 templates/json-action.md

最佳实践

  • 始终定义输入 schema——不要跳过 Zod 验证
  • 对已知错误使用 ActionError——标准化错误码便于客户端处理
  • HTML 表单使用 accept: 'form'——原生表单提交支持
  • 渐进增强——表单无 JS 可工作,有 JS 时增强
  • 检查 ctx.cookies 进行鉴权——未登录时抛出 UNAUTHORIZED

适用场景

适用于需要在 Astro 中实现类型安全服务器函数、表单处理、数据变更、渐进增强表单以及替代 API 端点的项目。

限制

该技能不深入覆盖 Astro DB 集成(由 astro-db 处理数据库层),也不覆盖 Content Layer schema(astro-content),其重点在于请求、验证与响应边界。

Agent 工作流(强制)

在任何实现之前,需并行启动 3 个 agent,每个 Agent 调用带一个名称:

  • fuse-ai-pilot:explore-codebase - 检查 src/actions/ 中现有 actions
  • fuse-ai-pilot:research-expert - 通过 Context7/Exa 验证最新 Actions 文档
  • mcp__context7__query-docs - 获取 defineAction 与 ActionError 示例

实现之后,运行 fuse-ai-pilot:sniper 进行验证。