在我们的应用中,与数据库的交互是核心功能之一。为了实现高效、安全且易于管理的数据库访问,我们采用了一种基于 tokio::sync::OnceCell 的 全局异步单例数据库连接池 模式。
这个模式被封装成一个极其简洁的异步函数 DB(),你可以在应用的任何 async 上下文中调用它来获取数据库连接。
2024/10/30大约 6 分钟
在我们的应用中,与数据库的交互是核心功能之一。为了实现高效、安全且易于管理的数据库访问,我们采用了一种基于 tokio::sync::OnceCell 的 全局异步单例数据库连接池 模式。
这个模式被封装成一个极其简洁的异步函数 DB(),你可以在应用的任何 async 上下文中调用它来获取数据库连接。
为了提升开发效率、减少模板代码并统一项目编码风格,我们的项目中广泛采用了 Prelude (预导入) 模式。你会发现在 model 和 service 模块下都有一个 prelude.rs 文件。
本文档将详细解释这个模式是什么,以及我们如何利用它来构建更清晰的代码。
UserInfo 提取器详解UserInfo 是我们应用中用于处理用户身份验证的核心工具。它不仅仅是一个简单的数据结构,更是一个强大的 Axum 提取器 (Extractor)。
它的主要目标是:将身份验证的复杂逻辑从业务处理函数 (Handler) 中完全剥离,让我们的代码更简洁、更安全、更易于维护。
GID)在构建分布式系统时,生成 全局唯一、趋势递增 且 高性能 的 ID 是一个核心需求。为了满足这一需求,我们引入了一个基于 Twitter Snowflake 算法的全局唯一 ID 生成器,并通过一个极其简洁的异步函数 GID() 来调用。