Ahora que ya establecimos la conexión con la BBDD y levantamos un servidor HTTP, es momento de mostrar los datos de la base en el navegador.
Visualización de datos en el browser
Los endpoints del tipo GET son de lectura de datos. Los navegadores web puedes obtener los mismos para renderizarlos con HTML y CSS y mostrarle al usuario la información. Vemos cómo puedes enviar datos de la base, pasando por el backend y llegando estos al navegador.
Paso 1. Imports necesarios
Importamos todo lo necesario, macros, variables de entorno, Actix, Diesel, esquemas y modelos:
La URL base de una aplicación web suele recibir el nombre de index. Configuremos una función que reciba el pool de conexión desde el main() y ejecute la consulta a la base de datos.
#[get("/")]asyncfnindex(pool:web::Data<DbPool>)->implResponder{// Traemos el POOL para disponer de la conexión a la BBDDlet conn = pool.get().expect("Problemas al traer el pool de conexión.");// El 'match' responde en caso de éxito o error en la consultamatchweb::block(move||{posts.load::<Post>(&conn)}).await{Ok(data)=>{returnHttpResponse::Ok().body(format!("{:?}", data));},Err(err)=>HttpResponse::Ok().body("Error al recibir los datos.")}}
Paso 3. Exponemos servidor HTTP
Finalmente, levantamos el servidor HTTP y exponemos la ruta index().
#[actix_web::main]asyncfnmain()->std::io::Result<()>{dotenv().ok();let db_url =env::var("DATABASE_URL").expect("La variable de entorno DATABASE_URL no existe.");let connection =ConnectionManager::<PgConnection>::new(db_url);// El POOL sirve para compartir la conexión con otros servicioslet pool =Pool::builder().build(connection).expect("No se pudo construir el Pool.");HttpServer::new(move||{// Compartimos el pool de conexión a cada endpointApp::new().service(index).app_data(web::Data::new(pool.clone()))}).bind(("127.0.0.1",8080)).unwrap().run().await}
Ingresando a 127.0.0.1:8080/, observarás el JSON que contiene todos los posts de tu base de datos. Ahora es tarea del equipo de front-end darle forma y color a esos datos.