gpt4 book ai didi

rust - 尝试在 rust api上实现rocket_cors CorsOptions

转载 作者:行者123 更新时间:2023-12-03 11:38:40 26 4
gpt4 key购买 nike

我是新手,现在正在使用火箭创建一个简单的CRUD API,稍后再将其放在AWS EC2存储桶中。我有一条或两条基本路线,我想开始实现CORS,以便react应用可以调用我的API。我已经尝试了多个教程和示例,但仍然遇到困难。
我看过的教程:

  • https://www.steadylearner.com/blog/read/How-to-use-CORS-and-OPTIONS-HTTP-request-with-Rust-Rocket
  • https://docs.rs/rocket/0.3.6/rocket/fairing/trait.Fairing.html
  • [dependencies]
    rocket = "0.4.6"
    rocket_codegen = "0.4.6"
    rocket_cors = "0.5.1"
    diesel = "1.4.5"
    dotenv = "0.15.0"
    serde = "1.0.117"
    serde_json = "1.0.59"
    serde_derive = "1.0.117"
    chrono = "0.4.19"

    [dependencies.rocket_contrib]
    version = "*"
    default-features = false
    features = ["json"]
    我的文件作为代码段附加到了文件中

    #![feature(proc_macro_hygiene, decl_macro)]

    #[macro_use]
    extern crate rocket;
    #[macro_use]
    extern crate serde_derive;

    use std::error::Error;
    use rocket::http::Method;
    use rocket_cors::{AllowedHeaders, AllowedOrigins};
    use rocket_contrib::json::Json;

    mod notes;
    mod user_creds;

    use notes::Notes;
    use user_creds::UserCreds;

    #[get("/api/v1/db/read")]
    fn read_db() -> &'static str {
    "reading"
    }

    #[get("/api/v1/govee")]
    fn govee() -> &'static str {
    "Hello, govee!"
    }

    #[post("/api/v1/db/notes", format = "json", data = "<notes>")]
    fn get_notes(notes: Json<Notes>) -> Json<Notes> {
    notes
    }

    #[post("/api/v1/login", format = "json", data = "<user_creds>")]
    fn login(user_creds: Json<UserCreds>) -> Json<UserCreds> {
    println!(
    "user creds, {}, {}",
    user_creds.username, user_creds.password
    );
    user_creds
    }


    fn main() {
    let allowed_origins = AllowedOrigins::some_exact(&["http://localhost:8080"]);

    // You can also deserialize this
    let cors = rocket_cors::CorsOptions {
    allowed_origins,
    allowed_methods: vec![Method::Get].into_iter().map(From::from).collect(),
    allowed_headers: AllowedHeaders::some(&["Authorization", "Accept"]),
    allow_credentials: true,
    ..Default::default()
    }
    .to_cors();

    rocket::ignite()
    .mount("/", routes![read_db])
    .attach(cors)
    .launch();
    }

    链接中的错误图片:
    enter image description here

    最佳答案

    CorsOptions::to_cors返回Result,这意味着它可能返回错误。您必须先处理该错误,然后才能将其用作Fairing:

    let cors = rocket_cors::CorsOptions {
    allowed_origins,
    allowed_methods: vec![Method::Get].into_iter().map(From::from).collect(),
    allowed_headers: AllowedHeaders::some(&["Authorization", "Accept"]),
    allow_credentials: true,
    ..Default::default()
    }
    .to_cors()
    // panic if there was an error
    .expect("error creating CORS fairing");
    现在,您可以将其附加为整流罩:
    rocket::ignite()
    .mount("/", routes![read_db])
    .attach(cors)
    .launch();

    关于rust - 尝试在 rust api上实现rocket_cors CorsOptions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65026862/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com