Rust Web开发框架actix-web入门案例

news2025/1/16 2:49:07

概述

在看书的时候,用到了actix-web这个框架的案例。

书里面的版本是1.0,但是我看官网最新都4.4了。

为了抹平这种信息差,所以我决定把官方提供的示例代码过一遍。

核心代码

Cargo.toml

[package]
name = "hello"
version = "0.1.0"
edition = "2021"

[dependencies]
actix-web = "4.4"
env_logger = "0.11"
log = "0.4"

main.rs

use actix_web::{middleware, web, App, HttpRequest, HttpServer};

async fn index(req: HttpRequest) -> &'static str {
    println!("REQ: {req:?}");
    "Hello world!"
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
    log::info!("starting HTTP server at http://192.168.77.129:8000");
    
    let server = HttpServer::new(|| {
        App::new()
            .wrap(middleware::Logger::default())
            .service(web::resource("/index.html").to(|| async {"Hello html!"}))
            .service(web::resource("/").to(index))
    });
    server.bind("0.0.0.0:8000")?
        .run()
        .await
}

运行和访问

http://192.168.77.129:8000/
在这里插入图片描述

http://192.168.77.129:8000/index.html
在这里插入图片描述

代码解读

引入依赖:

use actix_web::{middleware, web, App, HttpRequest, HttpServer};

首页路由:

  • 获取请求信息:index(req: HttpRequest)
  • 返回一个纯文本字符串:&'static str
async fn index(req: HttpRequest) -> &'static str {
    println!("REQ: {req:?}");
    "Hello world!"
}

入口方法:

  • 定义入口方法:#[actix_web::main]
  • 声明入口方法:async fn main() -> std::io::Result<()> {
  • 初始化日志:env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
  • 记录一个info级别的日志:log::info!("starting HTTP server at http://192.168.77.129:8000");
  • 创建服务对象:let server = HttpServer::new(|| {
  • 使用日志中间件:.wrap(middleware::Logger::default())
  • 挂载路由/index.html.service(web::resource("/index.html").to(|| async {"Hello html!"}))
  • 挂载路由/ .service(web::resource("/").to(index))
  • 启动服务:server.bind("0.0.0.0:8000")?
#[actix_web::main]
async fn main() -> std::io::Result<()> {
    env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
    log::info!("starting HTTP server at http://192.168.77.129:8000");
    
    let server = HttpServer::new(|| {
        App::new()
            .wrap(middleware::Logger::default())
            .service(web::resource("/index.html").to(|| async {"Hello html!"}))
            .service(web::resource("/").to(index))
    });
    server.bind("0.0.0.0:8000")?
        .run()
        .await
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1677689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(教程)gpt-4o如何使用,怎么体验?gpt-4o和gpt-4-turbo的区别

今天OpenAI发布了gpt-4o&#xff0c;我体验之后&#xff0c;gpt-4o简直逆天了。中文能力也挺别强。速度比现在的gpt4还要快。 早在 5 月 11 日&#xff0c;Sam 就在推文中表示&#xff1a;OpenAI 并没有推出 GPT-5&#xff0c;或搜索引擎&#xff0c;但团队一直在努力研发一些…

重启服务器后node节点显示NotReady

场景&#xff1a;夜间进行了断电维护&#xff0c;重启后发现业务无法使用&#xff0c;检查发现一个node节点显示NotReady. 去到目标服务器查看kubelet服务未成功启动 journalctl -u kubelet 执行journalctl -u kubelet 查看日志发现提示&#xff1a; ailed to run Kubelet: run…

IRENE:医学图像、文本、基因数据 + 多模态融合 + 疾病诊断模型

IRENE&#xff1a;医学图像、文本、基因数据 多模态融合 疾病诊断模型 多模态融合方法分析与分类1. 早期融合方法2. 晚期融合方法3. 混合融合方法 传统非统一的多模态融合方法的局限性IRENE 解法子解法1&#xff1a;多模态表征学习子解法2&#xff1a;双向多模态注意力机制IR…

AC/DC电源模块的故障诊断与维修技巧

BOSHIDA AC/DC电源模块的故障诊断与维修技巧 AC/DC电源模块是一种常用的电力转换设备&#xff0c;用于将交流电转换为直流电供给电子设备。然而&#xff0c;由于使用环境和操作不当等原因&#xff0c;电源模块可能会出现故障。本文将介绍AC/DC电源模块的故障诊断与维修技巧。…

【稀疏三维重建】pixelSplat:仅需两张图像的3D Gaussian Splats重建

文章目录 一.摘要二、相关工作 , 背景(gs)三、基于图像的三维高斯预测3.1 双视图图像编码器&#xff08;解决尺度模糊性&#xff09;3.2 &#xff08;像素对齐的&#xff09;高斯参数预测 四、实验效果 论文&#xff1a;《pixelSplat: 3D Gaussian Splats from Image Pairs for…

【脚本】使用脚本备份docker中部署的mysql数据库

v1版本明文密码方式&#xff1a; #!/bin/bash# 定义 MySQL 容器名称和数据库信息 container_name"mysql_container" db_user"root" db_password"your_password"# 定义要备份的数据库列表 databases("database1" "database2"…

pyenv 之 python 多版本管理(win11)

1. 背景 常常会用到Python的多个版本&#xff0c;因此可以使用Pyenv来对Python版本进行管理。 2. win11下载 pyenv 在终端执行下载语句&#xff1a; pip install pyenv-win --target D:\software\pyenv 其中 D:\software\pyenv 为你想要下载到的文件目录&#xff0c;建议在 …

数据中台管理系统原型

数据中台是一个通用性的基础平台&#xff0c;适用于各类行业场景&#xff0c;数据中台包含多元数据汇聚、数据标准化、数据开发、数据共享、数据智能、数据资产管理等功能&#xff0c;助力企业数字化转型。 数据汇聚 数据汇聚是将不同系统、不同类型的多元源数据汇聚至目标数据…

动态规划-两个数组的dp问题3

文章目录 1. 两个字符串的最小ASCII删除和&#xff08;712&#xff09;2. 最长重复子数组&#xff08;718&#xff09; 1. 两个字符串的最小ASCII删除和&#xff08;712&#xff09; 题目描述&#xff1a; 状态表示&#xff1a; 根据经验以及题目要求&#xff0c;建立二维数…

深度解析YOLOV9,目标检测算法(附论文和源码)|

目录 一、YOLOV9 1、概述&#xff1a; 2&#xff0c;论文摘要&#xff1a; 输入数据在前馈过程中可能会有不可忽略的信息丢失。这种信息丢失会导致梯度流出现偏差&#xff0c;而梯度流又被用于更新模型。上述问题会导致深度网络在目标和输入之间建立不正确的关联&#xff0c…

【千帆AppBuidler】零代码构建AI人工智能应用,全网都在喊话歌手谁能应战,一键AI制作歌手信息查询应用

欢迎来到《小5讲堂》 这是《千帆平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 背景创建应用平台地址随机生成快速创建应用头像应用名称应用描述…

Python自动化神器:如何用PyAutoGUI模拟滚轮动一次

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 一、PyAutoGUI简介 PyAutoGUI是一个纯Python的GUI自动化工具&#xff0c;其目的是可以用程序控制鼠标和键盘操作。它主要在三个方面发挥作用&#xff1a;1&#xff09;对屏幕上的图像进行识别&#xff1b;2&#xf…

8.11 矢量图层线要素单一符号使用二

文章目录 前言箭头&#xff08;Arrow&#xff09;QGis设置线符号为箭头(Arrow)二次开发代码实现 总结 前言 本章介绍矢量图层线要素单一符号中箭头&#xff08;Arrow&#xff09;的使用说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 箭头&#xff08;Arr…

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏5(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言三段攻击攻击设置只对敌人造成伤害限制可以移动攻击问题 角色连续按四下攻击&#xff0c;最后会多a一下问题&#xff1a;站在原地连续攻击野猪&#xff0c;只有第一下攻击野猪才掉血&#xff0c;后面的攻击野猪不掉血源码完结 …

数据结构复习指导之图的存储及基本操作

文章目录 图的存储及基本操作 考纲内容 复习提示 1.邻接矩阵法 2.邻接表法 3.十字链表 4.邻接多重表 5.图的基本操作 图的存储及基本操作 图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法&#xff0c;采用不同的存储方式将对程序的效率产生…

八字排盘软件有哪些?

八字排盘软件是根据中国传统命理学中的生辰八字&#xff08;即一个人出生的年、月、日、时&#xff09;来分析个人命运和运势的工具。以下是一些可用的八字排盘软件&#xff1a; 无敌八字排盘算命软件 - 精准的八字排盘&#xff0c;全完免费&#xff0c;有手机版电脑版&#xf…

CentOS 安装 SeaweedFS

1. SeaweedFS 介绍 SeaweedFS 是一个简单且高度可扩展的分布式文件系统。有两个目标&#xff1a; to store billions of files! (存储数十亿个文件&#xff01;)to serve the files fast! (快速提供文件&#xff01;) Seaweedfs的中心节点&#xff08;center master&#xff09…

Stable Diffusion基础界面介绍

SD是stable diffusion的简称&#xff0c;AI绘画的一个开源应用,&#xff08;不需要科学上网&#xff09;&#xff0c;目前使用的版本是B站UP秋葉aaaki整理的最终版。 安装教程详见 B站up主 秋葉aaaki&#xff0c;教程下有提供stable diffusion的下载链接。 安装必要的三个基础…

接口文档编写注意事项

接口文档编写注意事项 字段方面 ①不需要的字段、逻辑中固定值的字段&#xff08;可写死的字段&#xff09;不提供 ②逻辑上可以合并的字段合并 例如&#xff1a;当一个互斥条件下&#xff0c;分别返回了两个字段&#xff0c;这个时候就可以在这个基础上将两个字段合并成一个…

UEC++学习(十五)创建、查找、加入会话

创建会话 基于上篇配置steam在线子系统之后&#xff0c;在Character.h中声明一个会话创建完成时的委托以及回调函数。 #include "Interfaces/OnlineSessionInterface.h"public://指向在线会话界面的指针,将会话接口存储在里面TSharedPtr<class IOnlineSession, ES…