Rocket是Rust中一个web服务端框架。使我们可以使用rust来构建web服务。
使用diesel
diesel是一个Rust实现的数据库的ORM。我们可以使用这个库来实现Rocket和数据库的通信。
环境设置
为了安全起见,我们一般不会把数据的连接放在git仓库中,而在rocket的数据库的使用的示例中,是把数据库中的连接放在了Rocket.toml文件中。这样我们就难免要把数据库的接连放在git仓库中。为了安全,我们需要自定义rocket启动时的配置内容。首先,我们需要添加一个叫dotenv的包。使用这个包来获取.env文件中的环境变量。
[dependencies]diesel = {version="1.4.8", features=["mysql","chrono"]}dotenv = "0.15.0"chrono = "0.4.19"[dependencies.rocket_sync_db_pools]version = "0.1.0-rc.1"features=["diesel_mysql_pool"]
上述包的作用:
- chrono 用于models 的时间格式
- dotenv 用于读取
.env中来环境变量- diesel_mysql_pool 用于
rocket通过diesel与mysql交互
自定义env
DATABASE_URL=mysql://
自定义rocket启动项:
#[launch]fn rocket() -> _ {dotenv().ok();let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");let figment = rocket::Config::figment().merge(("database","{diesel={url=".to_string()+database_url+"}}"));rocket::custom(figment).mount("/",routes![])}
路由
动态路由
动态路由又叫参数路由。在Rocket 中用以下的方式来表示:
#[get("/hello/<name>")]fn hello(name: &str)->String {format!("Hello, {}!", name)}
通过像上面这样的设置和声明,我们就创建了一个动态路由。在这个动态路由中,我们可以使用`name`来获取第二个路径参数。这种做法不仅仅在`get`请求中使用,还可以在使用在其他方法中。
请求
请求守卫
在Rocket中,只要在请求参数中实现了FromRequest就实现了请求守卫功能。当然,在Rocket中有默认的几个请求守卫。他们如下这:
- Method 请求方法
- &Origin 请求地址
- &Host 请求主机号
- &Route 请求路由
- &Cookjar 请求的Cookie
- &Config 应用配置
- ContentType 请求类型
- IpAddr 请求的IP地址
- SocketAddr Socket地址
- Option
where T:FromRequest - Result
where T:FromRequest 响应
配置文件
当我们使用Rocket时,我们需要对Rocket做一些配置,这个时候,我们可以使用Rocket.toml文件来达到我们的目的。配置sqlx输出日志
当我们使用sqlx作为我们数据库的工具的时候,我们可能需要打印出sql的日志输出。这个时候,我们只要在Rocket.toml中database中设置log_level为debug即可。如:[default.databases.name]url = ""log_level="debug"
