Trait roa::query::Query [−][src]
A context extension.
This extension must be used in downstream of middleware query_parser
,
otherwise you cannot get expected query variable.
Example
use roa::query::query_parser; use roa::{App, Context}; use roa::http::StatusCode; use roa::preload::*; use async_std::task::spawn; async fn must(ctx: &mut Context) -> roa::Result { assert_eq!("Hexilee", &*ctx.must_query("name")?); Ok(()) } #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // downstream of `query_parser` let app = App::new() .gate(query_parser) .end(must); let (addr, server) = app.run()?; spawn(server); let resp = reqwest::get(&format!("http://{}?name=Hexilee", addr)).await?; assert_eq!(StatusCode::OK, resp.status()); // miss `query_parser` let app = App::new().end(must); let (addr, server) = app.run()?; spawn(server); let resp = reqwest::get(&format!("http://{}?name=Hexilee", addr)).await?; assert_eq!(StatusCode::BAD_REQUEST, resp.status()); Ok(()) }
Required methods
fn must_query<'a>(&self, name: &'a str) -> Result<Variable<'a, String>>
[src]
Must get a variable, throw 400 BAD_REQUEST if it not exists.
Example
use roa::query::query_parser; use roa::{App, Context}; use roa::http::StatusCode; use roa::preload::*; use async_std::task::spawn; async fn must(ctx: &mut Context) -> roa::Result { assert_eq!("Hexilee", &*ctx.must_query("name")?); Ok(()) } #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // downstream of `query_parser` let app = App::new() .gate(query_parser) .end(must); let (addr, server) = app.run()?; spawn(server); let resp = reqwest::get(&format!("http://{}", addr)).await?; assert_eq!(StatusCode::BAD_REQUEST, resp.status()); Ok(()) }
fn query<'a>(&self, name: &'a str) -> Option<Variable<'a, String>>
[src]
Query a variable, return None
if it not exists.
Example
use roa::query::query_parser; use roa::{App, Context}; use roa::http::StatusCode; use roa::preload::*; use async_std::task::spawn; async fn test(ctx: &mut Context) -> roa::Result { assert!(ctx.query("name").is_none()); Ok(()) } #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // downstream of `query_parser` let app = App::new() .gate(query_parser) .end(test); let (addr, server) = app.run()?; spawn(server); let resp = reqwest::get(&format!("http://{}", addr)).await?; assert_eq!(StatusCode::OK, resp.status()); Ok(()) }