3

I am trying to use a simple Middleware with ActixWeb 4:

HttpServer::new(
    move || {
        let app_state = AppState {
            db_helper: external_db.clone(),
            client: Client::new(),
        };
        App::new()
            .wrap_fn(|req, srv| {
                let header = req.headers().get("Test").unwrap().to_str().unwrap().to_owned();
                let fut = srv.call(req);
                async move {
                    let res = fut.await?;
                    println!("{:#?}", header);
                    Ok(res)
                }
            })
            .app_data(web::Data::new(app_state))
            .service(web::scope(API_PATH)
                .service(user_controller::user_scope())
            )
    })
    .bind(SERVER_URL)?
    .run();

It's a very simple sample from their tutorial. However, I always get an error:

 let fut = srv.call(req);
               ^^^^ method cannot be called on `&actix_web::app_service::AppRouting` due to unsatisfied trait bounds

How can I solve this?

mkrieger1
  • 19,194
  • 5
  • 54
  • 65
Kingfisher Phuoc
  • 8,052
  • 9
  • 46
  • 86

1 Answers1

0

You need to bring the trait into scope with

use actix_web::dev::Service;