问题描述
我想将创建的应用实例传递给 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
}
相关问题:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)