rust trait `Clone`未为`actix_web::Scope`实现

hrirmatl  于 2023-06-06  发布在  其他
关注(0)|答案(2)|浏览(135)

我想将我的应用程序路由分组到作用域中,以便将来可以按域分离它们的文件位置。我想做的是

HttpServer::new(move || App::new().app_data(app_state.clone()).service(delete_comment).service(update_comment).service(get_comments).service(create_comment))
        .bind(("127.0.0.1", 8080))?
        .run()
        .await

致:

let comment_scope =  web::scope("/comments").service(delete_comment).service(update_comment).service(get_comments).service(create_comment);
HttpServer::new(move || App::new().app_data(app_state.clone()).service(comment_scope))
        .bind(("127.0.0.1", 8080))?
        .run()
        .await

但是它一直告诉我特质Clone没有为actix_web::Scope实现。我该怎么解决这个问题?

jutyujz0

jutyujz01#

你只需要将comment_scope声明移到new闭包中:

HttpServer::new(move || {
      
        let comment_scope = web::scope("/comments")
        .service(delete_comment)
        .service(update_comment)
        .service(get_comments)
        .service(create_comment);

        App::new()
            .service(comment_scope)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
4dc9hkyq

4dc9hkyq2#

如何使用TcpListener:

use std::net::TcpListener;
pub fn run(listener: TcpListener) -> Result<Server, std::io::Error> {
    let server = HttpServer::new(|| {
        App::new()
            .route("/comments", web::post().to(comments))
            [/.../]
    })
        .listen(listener)?
        .run();
    Ok(server)
}

相关问题