1 个稳定版本
1.0.0 | 2024年5月30日 |
---|
#2191 在 网页编程
26KB
674 代码行
just_serve_it
just_serve_it 是用 Rust 编写的轻量级且多线程的 网页框架
。它被设计用来高效处理 HTTP 请求,为构建网页应用程序和 API 提供坚实的基础。just_serve_it 专注于简洁和性能,提供了路由、中间件和静态文件服务的基本功能。
特性
- HTTP 请求处理: just_serve_it 处理 HTTP 请求,非常适合不需要 HTTPS 的应用程序。
- 多线程: 使用 Rust 强大的并发特性高效处理多个请求。
- 路由: 定义不同 HTTP 方法(GET、POST 等)的路由,并根据 URL 模式处理请求。
- 中间件支持: 使用中间件来处理请求和响应,实现如日志记录、身份验证和正文解析等功能。
- 静态文件服务: 从指定的目录(如 HTML、CSS 和 JavaScript 文件)提供服务。
- 错误处理: 可定制的错误处理,为不同的错误条件提供用户友好的响应。
安装
cargo add just_serve_it
用法
以下是一个演示如何使用 just_serve_it 框架的示例。
use just_serve_it;
use just_serve_it::{middleware, path::Path, request::Request, response::Response, Server};
use std::io::Result;
use std::thread::sleep;
use std::time::Duration;
fn main() -> Result<()> {
let mut server = Server::new("HTTP Server");
server.not_found(not_found)?;
server._use_(middleware::ServeStatic::dir("public"));
server._use_(middleware::BodyParser::json());
server._use_(middleware::BodyParser::url_encoded());
server.get("/", root_handler)?;
server.get("/about", about_handler)?;
server.post("/", root_post_handler)?;
server.listen("127.0.0.1", 8080, || {
println!("Listening on 127.0.0.1:8080");
Ok(())
})?;
Ok(())
}
fn root_handler(_req: Request, mut res: Response) -> Result<()> {
res.send("/> Home Page!")?;
Ok(())
}
fn about_handler(_req: Request, mut res: Response) -> Result<()> {
sleep(Duration::from_secs(4));
res.send("/about> About Page!")?;
Ok(())
}
fn not_found(_req: Request, mut res: Response) -> Result<()> {
res.status.status_code = 404;
let path = Path::new("public");
res.send_file(path.join("NotFound.html").to_str())?;
Ok(())
}
fn root_post_handler(req: Request, mut res: Response) -> Result<()> {
if let Some(body) = req.body {
println!("RAW: {:?}", body.raw.unwrap());
if let Some(json_data) = body.json {
println!("JSON: {:?}", json_data);
}
if let Some(url_encoded_data) = body.url_encoded {
println!("URL-ENCODED: {:?}", url_encoded_data);
}
let path = Path::new("public");
res.send_file(path.join("home.html").to_str())?;
} else {
res.send("No Data!")?;
}
Ok(())
}
贡献
欢迎贡献!请fork仓库并提交一个 pull request。
依赖
~0.5–1MB
~22K SLoC