1、设置新项目:
# create a new Rust binary application |
2、准备依赖包:
在项目的根目录下打开一个新的命令行解释器,然后执行以下命令:
install dependencies |
通过参数-F <crate>/<feature>. 下载拉入以下依赖:
- axum,我们的 Web 框架
- tokio的全部功能, Rust 的异步运行时
- lettre crate,Rust 的邮件程序库
- serde的派生特性 ,一个用于解析 JSON 的 crate,
- dotenv用于在开发中解析环境变量
此时,我们的应用程序清单 ( Cargo.toml) 将如下所示:
[package] |
3、编码
切换导航到src/main.rs内容并将其替换为以下列表:
use axum::{response::Html, routing::get, Router}; |
这段是axum hello-word example的摘录。
我们首先从 axum 导入所需的模块以及SocketAddr从 Rust 标准库导入的模块,这SocketAddr是一个 IP 地址构建器。我们正在使用它来构造 localhost IP 地址,如下所示:
let addr = SocketAddr::from(([127, 0, 0, 1], 3000)); |
最后,我们将地址传递给我们的 Axum 服务器实例:
... |
Axum 使用“handler”来表示我们通常在Node 的 Expressjs的controller等框架中类似功能。
控制器(或handler)本质上是接受和解析我们的 HTTP 请求并处理它们以返回 HTTP 响应的函数或方法。
async fn handler() -> Html<&'static str> { |
我们的服务器已将一个处理程序安装到基本路由,如下所示:
... |
一旦您在浏览器中访问https://127.0.0.1:3000,这个路由就会打印出“Hello World”。
让我们继续创建一个处理程序来发送我们的电子邮件。就在我们这样做之前,我们需要创建一个.env文件来保存我们的环境变量。
create a .env file |
填充 . env包含以下字段及其对应值的文件:
the SMTP username, typically the full email address |
现在,让我们到 src/main.rs 创建我们的处理程序,一旦完成,我们将把处理程序挂载到路由中。
要做到这一点,请将 src/main.rs 的内容替换为下面的列表,注意注释和添加的片段:
use axum::{ |
解释
- 我首先从每个 crate 导入所需的模块
... |
- 我定义了一个包含 HTTP 有效负载的数据结构,这是Axum Extractor所要求的,我将在以下部分中讨论它。
... |
- 我初始化了dotenv crate以允许在开发中解析环境变量,然后我使用Axum的post方法将路由处理程序安装到/send-email路由上,处理服务器接受的请求。
... |
总结部分基本上是,插入我们的环境变量,解析我们的 HTTP 请求负载并发送电子邮件,并在控制台中打印响应。
测试
对于测试,您可以使用任何您熟悉的 HTTP 客户端,最常见的是Curl和 Postman。
但是,我发现Thunder Client使用起来更方便,因为它是一个 VS Code 扩展。这意味着我可以在舒适的情况下做任何事情。