当前位置: 首页 > news >正文

【Rust】从0到1开发和运行Web相关功能,并简单实现数据库连接和查询

上一篇文章我们已经学习和了解了Rust编程语言的大概知识点以及常见的应用场景,
因此,本篇文章博主将从Rust的Web开发,从0到1开发并运行Web相关功能,简单实现图片采集并设置系统壁纸。

目录

  • 项目搭建
    • 项目结构
    • 配置文件
    • 调整位置
    • 构建和运行
  • 运行Web
    • 切换目录
    • 编译与运行
    • 查看效果
    • 解决乱码
  • 操作数据库
    • tiberius 库
    • 安装依赖
    • 基本连接
  • 总结
  • 文章推荐

项目搭建

项目结构

在我们的项目目录中,需要有以下文件:

你的项目目录/
├── Cargo.toml    # 项目配置文件
└── src/└── main.rs   # 你的代码文件

配置文件

Cargo.toml是Rust项目的配置文件,采用TOML格式,用于定义项目元数据、依赖关系和构建配置。

核心功能

  • 项目元数据:包含名称(name)、版本(version)、Rust版本(edition)等基本信息。 25
  • 依赖管理:通过[dependencies]部分声明外部库(crate)及其版本、特性等。 24
  • 构建配置:指定编译选项、输出类型(如库或可执行文件)等。 56

关键区别

  • Cargo.lock:由Cargo自动生成并维护,记录依赖项的确切版本,确保构建可重复性。 15
    示例结构
[package]
name = "my_project"
version = "0.1.0"
edition = "2021"[dependencies]
rand = "0.8"

了解完配置文件大概用途后,我们在与 main.rs 相同的目录中创建 Cargo.toml 文件,内容如下:

[package]
name = "my-actix-app"
version = "0.1.0"
edition = "2021"  # 关键:这解决了 async fn 的问题[dependencies]
actix-web = "4.4"
tokio = { version = "1.0", features = ["full"] }

需要特别注意,配置文件里的关键词不能重复,比如,不能出现两次[dependencies]或者tokio

调整位置

如果刚开始只有一个main.rs文件,那么就需要进行文件位置调整,特别是在linux下的话,一般都是用命令操作。
将我们的 main.rs 文件移动到 src 目录下:

# 如果当前目录结构不对,执行这些命令
mkdir src
mv main.rs src/main.rs

构建和运行

在项目根目录(有 Cargo.toml 的目录)中执行:

# 构建项目
cargo build# 运行项目
cargo run

cargo run,这个下载过程可能需要点时间,大概十来分钟,看个人的网络快慢吧,下载的文件会比较多。
在这里插入图片描述
在这里插入图片描述
如果只出现黄色警告,那么这是一个警告而不是错误,说明你的程序已经成功编译并运行了。

运行Web

切换目录

cd D:\git\rust\src

在这里插入图片描述
设置代码如下:

// 使用 Actix-web 框架的简单示例
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};#[get("/")]
async fn hello() -> impl Responder {HttpResponse::Ok().body("Hello world! 全栈小5博主运行的Rust第一个网站")
}#[post("/echo")]
async fn echo(req_body: String) -> impl Responder {HttpResponse::Ok().body(req_body)
}#[actix_web::main]
async fn main() -> std::io::Result<()> {HttpServer::new(|| {App::new().service(hello).service(echo)}).bind("127.0.0.1:8080")?.run().await
}

编译与运行

默认设置的端口号是8080

cargo run# 或者
cargo.exe run

在这里插入图片描述
从上面截图可以知道,Actix-web,服务器已经启动,设置服务监听网址是:127.0.0.1:8080。

查看效果

打开浏览器访问,效果如下默认运行出现中文乱码,如何解决呢
在这里插入图片描述

解决乱码

通过设置Content-Type头来解决乱码问题

.content_type("text/html; charset=utf-8")

完整代码如下

// 使用 Actix-web 框架的简单示例
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};#[get("/")]
async fn hello() -> impl Responder {HttpResponse::Ok().content_type("text/html; charset=utf-8").body("Hello world! 全栈小5博主运行的Rust第一个网站")
}#[post("/echo")]
async fn echo(req_body: String) -> impl Responder {HttpResponse::Ok().content_type("text/html; charset=utf-8").body(req_body)
}#[actix_web::main]
async fn main() -> std::io::Result<()> {HttpServer::new(|| {App::new().service(hello).service(echo)}).bind("127.0.0.1:8080")?.run().await
}

设置编码问题后,即可正常显示
在这里插入图片描述

操作数据库

在上一步骤我们已经了解和运行了web网站,接下来再了解下如何在rust下操作数据库,并通过接口返回数据。

tiberius 库

博主这里使用tiberius库进行数据库连接和操作

安装依赖

[dependencies]
tiberius = { version = "0.12", features = ["tokio"] }
tokio = { version = "1.0", features = ["full"] }
tokio-util = { version = "0.7", features = ["compat"] }

操作运行后,会根据配置文件安装依赖
在这里插入图片描述

基本连接

use tiberius::{Client, Config, AuthMethod};
use tokio::net::TcpStream;
use tokio_util::compat::{TokioAsyncReadCompatExt, TokioAsyncWriteCompatExt};
use std::error::Error;#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {let mut config = Config::new();config.host("ip地址");config.port(1433);config.database("数据库名");config.authentication(AuthMethod::sql_server("账号", "密码"));// 禁用 TLS 证书验证(仅开发环境使用)config.trust_cert();let tcp = TcpStream::connect(config.get_addr()).await?;let compatible_tcp = tcp.compat();let mut client = Client::connect(config, compatible_tcp).await?;println!("成功连接到SQL Server!");// 执行查询let stream = client.query("select id,compay,job from boss_job", &[]).await?;let row = stream.into_row().await?.unwrap();let id: i32 = row.get(0).unwrap();let name: &str = row.get(1).unwrap();let job: &str = row.get(2).unwrap();println!("id: {}, compay: {}, job: {}", id, name, job);Ok(())
}

输出得效果
在这里插入图片描述

总结

通过这个从0到1的Rust项目实战,我成功打通了Web服务、数据库操作这些后端核心环节。
整个过程下来,有几点深刻的体会:

  1. 环境是第一步:Rust项目结构的搭建和Cargo.toml的依赖管理非常清晰,但刚接触得小伙伴务必注意edition版本和依赖特性的完整性,这是避免后续异步编程等问题的关键。
  2. 变量得可变性:这个博主在刚开始一直忘记给变量加一个mut,导致一直报错,所以刚接触得小伙伴也要特别注意这个。
  3. 框架效率很高:使用Actix-web框架,寥寥几行代码就能快速拉起一个高性能的Web服务器,Rust在Web领域的潜力巨大。
  4. 细节决定体验:一个简单的中文乱码问题,提醒我们处理Web响应时必须注意编码细节,通过设置Content-Type头即可轻松解决。
  5. 生态很成熟:通过tiberius库连接SQL Server数据库非常顺畅,Tokio异步运行时为网络和数据库IO提供了强大的底层支持,让我感受到了Rust在生产环境下的可靠性。
    这次实践不仅让我跑通了Rust Web开发的全流程,更验证了Rust在构建高效、可靠后端服务方面的能力。接下来,我计划在此基础上实现更复杂的功能,比如图片采集和自动设置壁纸,继续探索Rust的更多可能性。

关注全栈小5,和我一起从实战中学习,一步步征服Rust!

文章推荐

【Rust】系统编程语言的核心语法以及常见应用场景浅谈:系统、Web、网络、命令行
【Rust】从0到1开发和运行Web相关功能,并简单实现数据库连接和查询
【Rust】通过系统编程语言获取当前系统内存、CPU等运行情况,以及简单实现图片采集并设置系统壁纸

http://www.dtcms.com/a/605069.html

相关文章:

  • AI与SEO策略结合下的关键词优化新发现
  • git仓库中的.git目录 , .gitattributes、.gitignore、.gitmodules、.modules文件作用与讲解
  • Win键失效解决方法
  • 酷秒神马 9.0:轻量架构 + 安全防护
  • 编译器用什么语言开发 | 深入分析编译器开发语言及其选择
  • 二手书网站建设报告网站建设的目的与意义
  • 宁波建网站报价客户制作网站时的问题
  • 【杂记】Microchip 的通用集成开发环境工具对照表(MPLAB X IDE)和芯片家族对标表(Microchip VS ST)
  • 使用C#代码在 Word 文档中查找并替换文本
  • Mac C语言编译器 | 如何选择适合的工具来提升开发效率
  • 【JAVA 进阶】Spring Boot 自动配置原理与自定义 Starter 实战
  • LeetCode 1658 | 将 x 减到 0 的最小操作数(C语言滑动窗口解法)
  • 《Effective Java》解读第12条:始终要覆盖toString
  • Linux C语言编译器 | C语言开发的最佳实践与工具选择
  • 网站备案电话没接产品设计分析案例
  • 112、23种设计模式之命令模式(20/23)
  • 第6章:空间查询与地理处理
  • 使用 Docker Compose 一键更新:深入理解 docker-compose pull 的适用场景
  • 一次在VS2022中使用sqlite数据库故障排查过程
  • Mailjet Setup Pitfall Guide: SPF, DKIM, DMARC Deliverability
  • 最好的企业网站电子商务网站建设考试重点
  • 大学新校区建设网站北京seo方法
  • SPI学习(QA)
  • 怎么用数据仓库来进行数据治理?
  • Linux_6:FTP云盘项目
  • Spring Boot spring.factories文件详细说明
  • 网站seo文章免费asp地方门户网站系统
  • 《信息存储与管理》逻辑串讲
  • dify TTS部署 GPT-SoVITS
  • kotlin中SharedFlow的简单使用