rust - 为什么在 hyper 中匹配请求路径后没有任何反应?

标签 rust hyper

我正在尝试使用 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,然后创建了另一个名为 resResponse。然后您修改 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/

相关文章:

unit-testing - 运行 cargo test 时如何抑制多线程的输出?

rust - Diesel "get_results"给出特征绑定(bind)错误

rust - 如何重用范围来获取数组的一部分?

rust - 创建具有自定义错误类型的 super 服务

string - 如何将结构或 JSON 转换为原始字符串?

module - 如何使用新的本地模块?

rust - Substrate:如何与 session 模块集成

rust - 如何使用hyper添加多个RPC端点?

rust - 如何使用 hyper 在 Rust 中启动 Web 服务器?