在 Astro 页面中构建 HTML 表单
在 SSR 模式下,Astro 页面既可以显示又可以处理表单。在本节示例中,你可以使用标准的 HTML 表单将数据提交到服务器。你的 frontmatter 脚本将在服务器端处理数据,而不向客户端发送任何 JavaScript。
前期准备
标题部分 前期准备- 一个开启了 SSR 服务端渲染模式 (
output: 'server'
) 模式的项目
操作步骤
标题部分 操作步骤-
创建一个包含表单和处理代码的
.astro
页面。例如,你可以添加一个注册页面(registration page): -
在页面中添加一个
<form>
标签,并给它添加一些input
标签内容。每个input
标签都应该有一个name
属性,用于描述该输入字段的值。请确保在表单中包含了
<button>
或<input type="submit">
元素以提交表单 -
使用校验属性提供基本的客户端校验功能,即使 JavaScript 被禁用这也能正常工作。
在这个例子中,
required
属性可以阻止在字段为空时提交表单;minlength
属性可以设置输入文本的最小要求长度;type="email"
属性还引入了校验功能,只接受符合有效电子邮件格式的输入。
-
提交表单将导致浏览器重新请求页面。把表单的数据传输属性
method
改为POST
,表单数据将作为Request
body 的一部分发送,而不是作为 URL 参数发送。 -
在 frontmatter 中检查
POST
方法,并使用Astro.request.formData()
访问表单数据。将其包裹在try ... catch
块中,以处理未通过表单发送的POST
请求和formData
无效的情况。 -
在服务器端验证表单数据。这应包括和客户端上的相同的验证方式,以防止你的端点被恶意提交,或者支持少数的不具备表单验证功能的早期旧版浏览器。
此外,还可以进行一些客户端无法完成的验证。例如,该示例检查电子邮件是否已存在于数据库中。
也可以通过将错误信息存储在一个
errors
对象中,并在模板中访问该对象,将错误消息发送回客户端。
更多方案
-
状态共享
学习如何使用 Nano Stores 在框架组件之间共享状态
-
添加 RSS 摘要
通过向你的 Astro 网站添加 RSS 摘要让用户来订阅你的内容。
-
Installing a Vite or Rollup plugin
Learn how you can import YAML data by adding a Rollup plugin to your project.
-
使用 API 路由构建表单
了解如何使用 JavaScript 发送表单到 API 路由
-
在 Astro 页面中构建 HTML 表单
了解如何在 Astro 页面中构建 HTML 表单并在你的 frontmatter 中处理提交请求
-
使用 Bun 和 Astro
学习如何在 Astro 网站上使用 Bun。
-
调用服务器端点
了解如何在 Astro 中调用服务器端点
-
校验验证码
了解如何创建一个 API 路由并从客户端进行获取。
-
用 Docker 来构建你的 Astro 网站
了解如何使用 Docker 来构建你的 Astro 网站。
-
为链接添加图标
了解如何安装 rehype 插件并为你 Markdown 文件中的链接添加图标
-
添加 i18n 功能
通过动态路由和内容集合来让你的 Astro 站点支持国际化。
-
Add Last Modified Time
Build a remark plugin to add the last modified time to your Markdown and MDX.
-
添加阅读时间
构建一个 remark 插件并将其添加到你的 Markdown 或 MDX 文件中。
-
在 Astro 组件中共享状态
了解如何通过 Nano Stores 在 Astro 组件中共享状态