一个微小的 Nim 微服务,三个真实存在的 bug,以及它们让我对自己那个‘妈妈级’Fork 的反思
作者为其作品集网站构建了一个 POST /api/contact 端点以处理消息。他们使用了 Mummy 框架,该框架包含 OpenAPI 模式生成和类型化验证。该端点接收姓名、邮箱和消息,并对存在性、类型、长度和邮箱格式进行验证。验证过程中的错误返回 400 响应,而发送失败则返回通用的 500 响应。附加中间件包括 CORS 处理、基于内存的速率限制器以及日志记录。最初计划使用 SMTP,但由于 Render 免费套餐对出站 SMTP 端口的限制,服务被切换至 Resend 的 REST API。出现了三个意外问题:因重命名 std/httpcore 导入导致的类型不匹配、gcsafe 编译器对逻辑上不可变的全局变量的问题,以及未注册的 OPTIONS 路由导致预检请求无法执行中间件。每个问题都提供了关于该框架内部机制、Nim 模块系统以及线程安全编程的宝贵见解。作者强调,这些问题是 Nim 特性与 Mummy 框架交叉领域的特定问题。完整的实现细节和部署脚本可在项目仓库中获取。