Rocket是Rust中一个web服务端框架。使我们可以使用rust来构建web服务。

使用diesel

diesel是一个Rust实现的数据库的ORM。我们可以使用这个库来实现Rocket和数据库的通信。

环境设置

为了安全起见,我们一般不会把数据的连接放在git仓库中,而在rocket的数据库的使用的示例中,是把数据库中的连接放在了Rocket.toml文件中。这样我们就难免要把数据库的接连放在git仓库中。为了安全,我们需要自定义rocket启动时的配置内容。首先,我们需要添加一个叫dotenv的包。使用这个包来获取.env文件中的环境变量。

  1. [dependencies]
  2. diesel = {version="1.4.8", features=["mysql","chrono"]}
  3. dotenv = "0.15.0"
  4. chrono = "0.4.19"
  5. [dependencies.rocket_sync_db_pools]
  6. version = "0.1.0-rc.1"
  7. features=["diesel_mysql_pool"]

上述包的作用:

  • chrono 用于models 的时间格式
  • dotenv 用于读取.env中来环境变量
  • diesel_mysql_pool 用于rocket通过dieselmysql交互

自定义env

  1. DATABASE_URL=mysql://

自定义rocket启动项:

  1. #[launch]
  2. fn rocket() -> _ {
  3. dotenv().ok();
  4. let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
  5. let figment = rocket::Config::figment()
  6. .merge(("database","{diesel={url=".to_string()+database_url+"}}"));
  7. rocket::custom(figment).mount("/",routes![])
  8. }

这样,我们就可以和diesel共用一个环境变量了。

路由

动态路由

动态路由又叫参数路由。在Rocket 中用以下的方式来表示:

  1. #[get("/hello/<name>")]
  2. fn hello(name: &str)->String {
  3. format!("Hello, {}!", name)
  4. }
  1. 通过像上面这样的设置和声明,我们就创建了一个动态路由。在这个动态路由中,我们可以使用`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.tomldatabase中设置log_leveldebug即可。如:
    1. [default.databases.name]
    2. url = ""
    3. log_level="debug"