как использовать tokio_ postgres в actix-web - PullRequest
0 голосов
/ 21 февраля 2020

Итак, я хочу использовать tokio_ postgres в API actix, я только начал, и у меня возникают трудности с разделением клиента в моем запросе get. Вот мой код:

use actix_web::{web, App, HttpServer, HttpResponse};
use tokio_postgres::{NoTls};
use std::cell::RefCell;

mod api;

use api::routes::hello_actix;

fn main() {
    actix_rt::System::run(|| {
        println!("connecting to postgres");
        let pro = tokio::spawn(
            async
            {
                let (client , conn) = match tokio_postgres::connect(
                    "foo",
                    NoTls)
                    .await {
                    Ok(t) => t,
                    Err(e) => panic!("{}", e)
                };

                tokio::spawn(async move {
                    if let Err(e) = conn.await {
                        eprintln!("connection error: {}", e);
                    }
                });

                println!("connected to postgres");
                HttpServer::new(|| {
                    App::new()
                        .data(RefCell::new(conn))
                        .route("/hello", web::get().to(hello_actix))
                        .default_service(web::route().to(|| HttpResponse::NotFound().body("404 Not Found")))
                })
                    .bind("127.0.0.1:8080")
                    .unwrap()
                    .run();
                Ok(())
            });

    });
}

Я основываю этот код на этом , но, похоже, он не работает.

Я также хотел бы остаться «Чистый» , поэтому я не хочу иметь глобального клиента, если это возможно. Можно ли вообще делать то, что я хочу?

...