Loco被称为面向业余项目和初创公司的Rust单人框架。Loco深受Rails的启发,如果你了解Rails和Rust,你会觉得很自在。如果你不了解Rails,那么你会发现Loco web框架令人耳目一新。
在这篇文章中,我们将演示一个不需要数据库的简单示例。
首先,安装Loco:
cargo install loco-cli
建立一个项目,如果你还没有一个工作目录,则创建一个文件夹来保存你所有的项目:
mkdir myprojects
cd myprojects
在工作目录下,运行以下命令创建一个新应用程序:
loco new
这将询问项目名称(默认为myapp),然后它将使用该名称创建一个文件夹。
它还会询问项目的类型,为你提供三个选择:
为简单起见,我们使用默认名称,并选择第一个不需要数据库的项目类型。
这样,就创建了一个名为myapp的文件夹,它是一个初始化的Rust Crate的git存储库,其中包含许多文件:
$ tree
.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── config
│ ├── development.yaml
│ ├── production.yaml
│ └── test.yaml
├── src
│ ├── app.rs
│ ├── bin
│ │ └── main.rs
│ ├── controllers
│ │ ├── home.rs
│ │ └── mod.rs
│ ├── lib.rs
│ └── views
│ ├── home.rs
│ └── mod.rs
└── tests
├── mod.rs
└── requests
├── home.rs
├── mod.rs
└── snapshots
└── can_get_home@home_request.snap
启动开发服务器:
cargo loco start
这将安装一堆crate,并在端口3000上启动web应用程序,
访问http://localhost:3000/api,网页显示“{"app_name":"loco"}”。
我们也可以使用以下命令运行测试:
cargo test
下面,我们添加一个新的api。在src/views目录中,创建一个hello.rs文件,代码如下:
use serde::{Deserialize, Serialize};
#[derive(Debug, Deserialize, Serialize)]
pub struct HelloResponse {
pub name: String,
}
impl HelloResponse {
#[must_use]
pub fn new(name: &str) -> Self {
Self {
name: name.to_string(),
}
}
pub fn hello(&self) -> String {
format!("Hello, {}", self.name)
}
}
修改src/views/mod.rs文件:
pub mod hello;
pub mod home;
在src/controllers目录下,创建一个hello.rs文件,代码如下:
use loco_rs::prelude::*;
use crate::views::hello::HelloResponse;
async fn hello() -> Result<Json<String>> {
format::json(HelloResponse::new("Loco").hello())
}
pub fn routes() -> Routes {
Routes::new().add("/hello", get(hello))
}
修改src/controllers/mod.rs文件:
pub mod hello;
pub mod home;
最后,修改src/app.rs文件:
pub struct App;
#[async_trait]
impl Hooks for App {
......
fn routes() -> AppRoutes {
AppRoutes::empty()
.prefix("/api")
.add_route(controllers::home::routes())
.add_route(controllers::hello::routes())
}
......
}
启动服务器:
cargo loco start
访问http://localhost:3000/api/hello,网页显示"Hello, Loco"。
这是一个很有前途的web框架,我们将拭目以待。
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8