gpt4 book ai didi

http - Hyper 找不到服务器模块

转载 作者:行者123 更新时间:2023-12-04 14:51:20 25 4
gpt4 key购买 nike

我正在用 Hyper 编写一个“hello world”HTTP 服务器,但是我找不到 Serverrt尝试导入模块时。
调用时cargo run ,然后我看到此错误消息:

26 |     let server = hyper::Server::bind(&addr).serve(router);
| ^^^^^^ could not find `Server` in `hyper`
我一定遗漏了一些关于 Rust 和 Hyper 的明显内容。我想做的是写一些东西 尽可能干燥/简单 仅包含 HTTP 层和一些基本路由。我想包含尽可能少的 3rd 方依赖项,例如避免我认为涉及异步行为的 Tokio,但我不确定上下文,因为我是 Rust 的新手。
看起来我必须使用 future ,所以我包含了这个依赖项,也许 future 只适用于 async保留字(我不确定它是来自 Tokio 还是 Rust 本身)。
让我感到困惑的是,在 Hyper 示例中,我确实看到了类似 use hyper::{Body, Request, Response, Server}; 的导入。 ,所以 Server东西一定在那里,某处。
这些是 Cargo.toml 中的依赖项:
hyper = "0.14.12"
serde_json = "1.0.67"
futures = "0.3.17"
这是 main.rs中的代码:
use futures::future;
use hyper::service::service_fn;
use hyper::{Body, Method, Response, StatusCode};
use serde_json::json;

fn main() {
let router = || {
service_fn(|req| match (req.method(), req.uri().path()) {
(&Method::GET, "/foo") => {
let mut res = Response::new(
Body::from(json!({"message": "bar"}).to_string())
);
future::ok(res)
},
(_, _) => {
let mut res = Response::new(
Body::from(json!({"content": "route not found"}).to_string())
);
*res.status_mut() = StatusCode::NOT_FOUND;
future::ok(res)
}
})
};

let addr = "127.0.0.1:8080".parse::<std::net::SocketAddr>().unwrap();
let server = hyper::Server::bind(&addr).serve(router); // <== this line fails to compile
// hyper::rt::run(server.map_err(|e| {
// eprintln!("server error: {}", e);
// }));
}
如何使上面的代码编译并运行?

最佳答案

根据documentation ,您的调用中缺少一个模块命名空间 hyper::server::Server :

let server = hyper::server::Server::bind(&addr).serve(router)
为了使用 server您需要激活 feature flag在 cargo 中:
hyper = { version = "0.14.12", features = ["server"] }

关于http - Hyper 找不到服务器模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69042780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com