Response

Handler 中, Response 会被作为参数传入:

#[fn_handler]
async fn hello_world(res: &mut Response) {
    res.render_plain_text("hello world!");
}

Response 在服务器接收到客户端请求后, 任何匹配到的 Handler 和中间件都可以向里面写入数据. 在某些情况下, 比如某个中间件希望阻止后续的中间件和 Handler 执行, 您可以使用 FlowCtrl:

#[fn_handler]
async fn hello_world(res: &mut Response, ctrl: &mut FlowCtrl) {
    ctrl.skip_reset();
    res.render_plain_text("hello world!");
}

写入内容

Response 中写入数据是非常简单的:

  • 写入纯文本数据

    res.render_plain_text("hello world!");
    
  • 写入 JSON 序列化数据

    #[derive(Serialize, Debug)]
    struct User {
        name: String,
    }
    let user = User{name: "jobs"};
    res.render_json(&user);
    
  • 写入 HTML

    res.render_html("<html><body>hello</body></html>");
    

写入 HTTP 错误

  • 使用 set_http_error 可以向 Response 写入详细错误信息.

    use salvo::http::errors::*;
    res.set_http_error(InternalServerError().with_summary("error when serialize object to json"))
    
  • 如果您不需要自定义错误信息, 可以直接调用 set_http_code.

    use salvo::http::StatusCode;
    res.set_status_code(StatusCode::BAD_REQUEST);