如何从函数返回actix web App实例?

问题描述

我想将创建的应用实例传递给 HttpServer,像这样 HttpServer::new(app::init()),它不起作用。

app.rs

use crate::db::new_pool;
use crate::message_handler::MessageHandler;
use crate::route;
use actix::prelude::{Addr,SyncArbiter};
use actix_web::{
    middleware::Logger,App,http::header::{AUTHORIZATION,CONTENT_TYPE},};

use actix_cors::Cors;
use std::env;

pub struct AppState {
    pub message_handler: Addr<MessageHandler>,}

pub fn init<T,B>() -> App<T,B> {
    let frontend_origin = env::var("FRONTEND_ORIGIN").ok();

    let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
    let database_pool = new_pool(database_url).expect("Failed to create pool.");

    let message_handler = SyncArbiter::start(num_cpus::get(),move || MessageHandler {
        db_connection_pool: database_pool.clone()
    });

    let bind_address = env::var("BIND_ADDRESS").expect("BIND_ADDRESS is not set");

    let state = AppState {
        message_handler: message_handler.clone(),};
    // let cors = match frontend_origin {
    //     Some(ref origin) => Cors::default()
    //         .allowed_origin(origin)
    //         .allowed_headers(vec![AUTHORIZATION,CONTENT_TYPE])
    //         .max_age(3600),//     None => Cors::default()
    //         .allowed_origin("*")
    //         .send_wildcard()
    //         .allowed_headers(vec![AUTHORIZATION,// };
    App::new()
        .data(state)
        .wrap(Logger::default())
        // .wrap(cors)
        .configure(route::routes)
}

main.rs

use env_logger;
use std::env;
use actix_web_tutorial::app;
use actix_web::HttpServer;

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    dotenv::dotenv().ok();

    if env::var("RUST_LOG").ok().is_none() {
        env::set_var("RUST_LOG","info");
    }
    env_logger::init();

    let bind_address = env::var("BIND_ADDRESS").expect("BIND_ADDRESS is not set");

    HttpServer::new(app::init())
    .bind(&bind_address)
    .unwrap_or_else(|_| panic!("Could not bind server to address {}",&bind_address))
    .run()
    .await
}

相关问题:

  1. rust actix: how can I properly return an App instance from a module?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)