`actix_web::Scope` 没有实现 `Clone` 特性。

3
我想把我的应用程序路由分组在范围内,这样我将来可以根据域名分离它们的文件位置。 我尝试做的是转换。
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。我该如何修复这个问题?

2个回答

5
你只需要将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

0
如何尝试使用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)
}

.bind替换为.listen与配置路由有什么关系? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接