2017-09-29 2 views
0

guide on Rocket's site schlägt vor, dass dynamische Routen eingestuft werden können. In diesem Beispiel werden für den dynamischen Abschnitt verschiedene Typen als übereinstimmende Kriterien für die Routen verwendet. Wenn ich eine URL mit etwas setzen andere als ein usize, bekomme ich folgende Fehlermeldung:Rocket analysiert RawStr in einer URL nicht, um Route

GET /user/three text/html: 
    => Matched: GET /user/<id> 
    => Failed to parse 'id': RawStr("three") 
    => Outcome: Forward 
    => Error: No matching routes for GET /user/three text/html. 
    => Warning: Responding with 404 Not Found catcher. 
    => Response succeeded. 

Der Code Ich verwende:

#![feature(plugin)] 
#![plugin(rocket_codegen)] 

extern crate rocket; 
use rocket::http::RawStr; 

#[get("/user/<id>")] 
fn user(id: usize) -> String { format!("First rank") } 

#[get("/user/<id>", rank = 2)] 
fn user_int(id: isize) -> String { format!("second rank") } 

#[get("/user/<id>", rank = 3)] 
fn user_str(id: &RawStr) -> String { format!("last rank") } 

fn main() { 
    rocket::ignite().mount("/", routes![user]).launch(); 
} 

Ich würde bei /user/three anstelle eines 404 error eine Seite erwarten Anzeige des Tests last rank. Warum macht es das nicht?

Antwort

1

Rakete weiß nicht, über Ihre Routen , wenn Sie es sagen, über sie:

fn main() { 
    rocket::ignite().mount("/", routes![user, user_int, user_str]).launch(); 
    //          ^^^^^^^^^^^^^^^^^^^^ 
} 
+0

Ja, genau das dachte, diese Sekunde aus. –