如何编写CORS适配器?

问题描述 投票:0回答:1

我使用 axum 和 sea-orm 作为我的后端。我遇到了 CORS 错误。

我尝试使用cors层

我不知道如何解决它。我用谷歌搜索了它,但所有其他代码都运行良好。

我做了最小的可重复示例 代码:

use axum::Server;
use axum::{
    routing::{get},
    Router, 
};
use http::Method;
use migration::sea_orm::DatabaseConnection;
use migration::MigratorTrait;
use migration::{
    sea_orm::{Database},
    Migrator,
};
use tower_http::cors::{Any, CorsLayer};

use std::{net::SocketAddr, str::FromStr};

// use ;
#[tokio::main]
async fn start() -> anyhow::Result<()> {
    let server_url = ("127.0.0.1:8000").to_string();
    let connection = Database::connect("sqlite://data.db?mode=rwc")
        .await
        .expect("Database connection failed");
    Migrator::up(&connection, None).await.unwrap();

    let state = AppState { connection };
    let cors = CorsLayer::new()
        .allow_methods([Method::GET, Method::POST])
        .allow_origin(Any);
    let app: Router = Router::new()
        .route("/", get(|| async { "Hello, World!" }))
        .layer(cors)
        .with_state(state);

    let addr = SocketAddr::from_str(&server_url).unwrap();
    Server::bind(&addr).serve(app.into_make_service()).await?;
    Ok(())
}

#[derive(Clone)]
pub struct AppState {
    pub(crate) connection: DatabaseConnection,
}

fn main() {
    start();
}

和错误:

the trait bound `Cors<Route<_>>: tower_service::Service<axum::http::Request<_>>` is not satisfied the trait `tower_service::Service<http::Request<ReqBody>>` is implemented for `Cors<S>

[dependencies]
tokio = { version = "1.29.0", features = ["full"] }
axum = { version = "0.6.19", features = ["macros"] }
tower-http = { version = "0.5.2", features = ["fs", "cors"] }
anyhow = "1.0.71"
migration = { path = "./migration" }
sea-orm = "1.0.0"
http = "1.0.0"
rust cors backend rust-axum
1个回答
0
投票

该问题的解决方案是将axum更新到0.7.5版本

axum = { version = "0.7.5", features = ["macros"] }

© www.soinside.com 2019 - 2024. All rights reserved.