背景:
通过actix创建一个http服务器,将接收过来的url通过tauri事件传递给前端,前端处理完成后将结果通过invoke传回tauri,再传回给actix,输出给浏览器。
目前tauri事件、invoke和http服务器都已打通,但是url不知道如何传递给前端。换 句话说,fn start_http_server(port: i64, app: tauri::AppHandle) -> String {}中的app不知道如何传递给actix中的方法,有大神可以给个思路吗?
附上目前的代码:
main.rs
#![cfg_attr(all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows")]
mod http;
use tauri::Manager;
use std::thread;
#[derive(Clone, serde::Serialize, serde::Deserialize)]
struct Person {
    name: String,
    age: i64,
    old_name: String,
}
#[tauri::command]
fn start_http_server(port: i64, app: tauri::AppHandle) -> String {
    thread::spawn(move || {
        match http::main(port, app) { // 这里把 app 传递过去,却不知道怎么 调用
            Ok(_) => {}
            Err(_) => {}
        }
    });
    format!("start http server success")
}
fn main() {
    tauri::Builder
        ::default()
        .invoke_handler(tauri::generate_handler![start_http_server])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
http.rs
use actix_web::{ web, App, HttpResponse, HttpServer, Responder, HttpRequest };
async fn get_url(req: HttpRequest) -> impl Responder {
    // 这里面怎么调用 main.rs 传递过来的 app,以便能够调用 tauri 的 app.emit_all 方法?
    HttpResponse::Ok().body(format!("{}", req.uri()))
}
#[actix_web::main]
pub async fn main(port: i64, app: tauri::AppHandle) -> std::io::Result<()> { // 这个 app 怎么传递给 get_url 方法呀?
    HttpServer::new(|| { App::new().default_service(web::route().to(get_url)) })
        .bind(format!("127.0.0.1:{}", port))?
        .run().await
}
    
	    
	    
		1
	    
	    
	    共 2 条评论, 1 页
	
	
    
评论区
写评论App里面支持放Data
这个代码样例在文档上面有 doc[https://docs.rs/actix-web/latest/actix_web/struct.App.html#method.app_data]
看起来需要一个closure来生成一个handler,这样就可以在handler中使用app这个变量,最近刚写了一个简单的web框架支持这种用法,感兴趣的话可以试一下,这里有一个简单的例子:https://github.com/shellfly/haro/blob/main/examples/closure/main.rs