Loco 快速入门
让我们在 loco
上通过 4 个命令创建一个博客后端。首先安装 loco-cli
和 sea-orm-cli
:
$ cargo install loco-cli
$ cargo install sea-orm-cli
现在你可以创建你的新应用(选择“Saas app”)。
$ loco new
✔ ❯ App name? · myapp
? ❯ What would you like to build? ›
lightweight-service (minimal, only controllers and views)
Rest API (with DB and user auth)
❯ Saas app (with DB and user auth)
🚂 Loco app generated successfully in:
myapp
要配置数据库,请使用 loco:loco
运行一个本地 postgres 数据库,并命名数据库为 [insert app]_development。
你可以使用 Docker 运行一个 Postgres 实例:
在生成一个 starter 时,数据库名称会包含你的应用名称和环境。例如,如果应用名为 myapp
,test.yaml
配置中的数据库名称将是 myapp_test
,在 development.yaml
配置中,数据库名将是 myapp_development
。
$ docker run -d -p 5432:5432 -e POSTGRES_USER=loco -e POSTGRES_DB=myapp_development -e POSTGRES_PASSWORD="loco" postgres:15.3-alpine
更高级的 docker-compose.yml
和 Dockerfiles
配置会包含 Redis 和 mailtutan
邮件发送器,可以在 GitHub 上找到。
现在 cd
到 myapp
目录并启动应用:
$ cd myapp
$ cargo loco start
Finished dev [unoptimized + debuginfo] target(s) in 21.63s
Running `target/debug/myapp start`
:
:
:
controller/app_routes.rs:203: [Middleware] Adding log trace id
▄ ▀
▀ ▄
▄ ▀ ▄ ▄ ▄▀
▄ ▀▄▄
▄ ▀ ▀ ▀▄▀█▄
▀█▄
▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▀▀█
██████ █████ ███ █████ ███ █████ ███ ▀█
██████ █████ ███ █████ ▀▀▀ █████ ███ ▄█▄
██████ █████ ███ █████ █████ ███ ████▄
██████ █████ ███ █████ ▄▄▄ █████ ███ █████
██████ █████ ███ ████ ███ █████ ███ ████▀
▀▀▀██▄ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ██▀
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
started on port 3000
你不必通过 cargo
运行,但在开发中强烈建议这样做。如果你构建 --release
,你的二进制文件将包含所有内容,包括你的代码,并且不需要 cargo
或 Rust。
添加 CRUD API
现在我们有一个带有用户认证的基础的 SaaS 应用。让我们通过使用 scaffold
命令添加一个 post
模型和以及其完整的 CRUD API,使其成为一个博客后端:
$ cargo loco generate scaffold post title:string content:text
:
:
added: "src/controllers/post.rs"
injected: "src/controllers/mod.rs"
injected: "src/app.rs"
added: "tests/requests/post.rs"
injected: "tests/requests/mod.rs"
* Migration for `post` added! You can now apply it with `$ cargo loco db migrate`.
* A test for model `posts` was added. Run with `cargo test`.
* Controller `post` was added successfully.
* Tests for controller `post` was added successfully. Run `cargo test`.
你的数据库已迁移,并且自动生成了模型、实体和一个完整的 CRUD 控制器。
启动你的应用:
$ cargo loco start
接下来,尝试使用 curl
添加一个 post
:
$ curl -X POST -H "Content-Type: application/json" -d '{
"title": "Your Title",
"content": "Your Content xxx"
}' localhost:3000/api/posts
还可以通过 curl
查看你的 posts:
$ curl localhost:3000/api/posts
这里我们使用的创建博客后端的命令分别为:
cargo install loco-cli
cargo install sea-orm-cli
loco new
cargo loco generate scaffold post title:string content:text
完成!享受你的 loco
之旅 🚂
查看 SaaS 用户认证
生成的应用包含一个基于 JWT 的完整用户认证系统。
要进行用户认证,你需要一个 redis 服务器。
以下 docker 命令启动一个 redis 服务器:
docker run -p 6379:6379 -d redis redis-server
使用 doctor 命令检查所需的资源:
$ cargo loco doctor
Finished dev [unoptimized + debuginfo] target(s) in 0.32s
Running `target/debug/myapp-cli doctor`
✅ SeaORM CLI is installed
✅ DB connection: success
✅ Redis connection: success
注册新用户
/api/auth/register
接口会在数据库中创建一个新用户,并带有用于帐户验证的 email_verification_token
。一封欢迎电子邮件会发送给用户,其中包含验证链接。
$ curl --location '127.0.0.1:3000/api/auth/register' \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Loco user",
"email": "user@loco.rs",
"password": "12341234"
}'
出于安全原因,如果用户已注册,则不会创建新用户,并且会返回 200 状态,而不公开用户电子邮件详细信息。
登录
注册新用户后,使用以下请求登录:
$ curl --location '127.0.0.1:3000/api/auth/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"email": "user@loco.rs",
"password": "12341234"
}'
响应包括用于认证的 JWT 令牌、用户 ID、姓名和验证状态。
{
"token": "...",
"pid": "2b20f998-b11e-4aeb-96d7-beca7671abda",
"name": "Loco 用户",
"is_verified": false
}
获取当前用户
此接口受认证中间件保护。
$ curl --location --request GET '127.0.0.1:3000/api/user/current' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer TOKEN'
查看 controllers/auth.rs
的源代码,了解如何在自己的控制器中使用认证中间件。