Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use once_cell::sync::OnceCell;
- use salvo::prelude::*;
- use serde::Serialize;
- use sqlx::{FromRow, PgPool};
- static POSTGRES: OnceCell<PgPool> = OnceCell::new();
- #[inline]
- pub fn get_postgres() -> &'static PgPool {
- unsafe { POSTGRES.get_unchecked() }
- }
- #[derive(FromRow, Serialize, Debug)]
- pub struct Page {
- pub page_id: i64,
- pub slug: String,
- pub title: String,
- pub content: String,
- }
- #[handler]
- pub async fn get_page(req: &mut Request, res: &mut Response) {
- let id = req.query::<i64>("id").unwrap();
- let data = sqlx::query_as::<_, Page>("select * from pages where page_id = $1")
- .bind(id)
- .fetch_one(get_postgres())
- .await
- .unwrap();
- res.render(serde_json::to_string(&data).unwrap());
- }
- #[tokio::main]
- async fn main() {
- tracing_subscriber::fmt().init();
- // postgresql connect info
- let postgres_uri = "postgres://cms:gfhSyu65D3rewfth@localhost/cms";
- let pool = PgPool::connect(postgres_uri).await.unwrap();
- POSTGRES.set(pool).unwrap();
- // router
- let router = Router::with_path("/<id>").get(get_page);
- tracing::info!("Listening on http://192.168.178.11:7878");
- Server::new(TcpListener::bind("192.168.178.11:7878")).serve(router).await;
- }
Advertisement
Add Comment
Please, Sign In to add comment