我正在尝试使用 hyper 0.11.2 读取 POSTed JSON。打印“Reached”后我没有看到任何事情发生。
fn call(&self, req: hyper::server::Request) -> Self::Future {
let mut response: Response = Response::new();
match (req.method(), req.path()) {
(&Method::Post, "/assests") => {
println!("Reached ... "); //POST: 200 OK
//let (method, uri, _version, head
let mut res: Response = Response::new();
if let Some(len) = req.headers().get::<ContentLength>() {
res.headers_mut().set(len.clone());
}
println!("Reached xxx {:?}", req.body());
res.with_body("req.body()");
}
_ => {
response.set_status(StatusCode::NotFound);
}
};
futures::future::ok(response)
}
输出:
Reached ...
Reached xxx Body(Body { [stream of values] })
最佳答案
您创建了一个名为 response
的新 Response
,然后创建了另一个名为 res
的 Response
。然后您修改 res
并将其丢弃,从您的函数返回 response
。如果您返回您修改的内容,您的服务器将返回 string "req.body()"
,正如您指定的那样。
fn call(&self, req: hyper::server::Request) -> Self::Future {
let mut response: Response = Response::new();
match (req.method(), req.path()) {
(&Method::Post, "/assets") => {
if let Some(len) = req.headers().get::<ContentLength>() {
response.headers_mut().set(len.clone());
}
response = response.with_body("req.body()");
}
_ => {
response.set_status(StatusCode::NotFound);
}
};
futures::future::ok(response)
}
我不会将内容长度设置为无效值——您返回的字符串与上传数据的长度不匹配。
关于rust - 为什么在 hyper 中匹配请求路径后没有任何反应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226982/