import dotenv from "dotenv"; dotenv.config({ path: ".env" }); import express, { Application, Request, Response } from "express"; import pg from "./database/pg"; import { PoolClient } from "pg"; const app: Application = express(); const port: number = parseInt(process.env.PORT as string) || 3000; //Middleware app.use(express.json()); app.use(express.urlencoded({ extended: true })); //Setting up for EJS app.set("views", `./src/views`); app.set("view engine", "ejs"); //Static route app.use(express.static(`${__dirname}/../public`)); //check and send index ejs app.get("/", (_req: Request, res: Response): void => { let todos: string[] = []; //Query postgres database to get all todos (async await) pg.query("SELECT * FROM todos", async (err: Error, result: any) => { if (err) { console.log("Error querying todos", err); return; } todos = result.rows.map((row: any) => row.todo); } res.render("index",{ todos, }); }); app.post("/form-action", (req: Request, res: Response): void => { const todo: string = req.body.todo; //query postgres to insert todo, $1 is a placeholder for the value of todo pg.query("INSERT INTO todos (todo) VALUES ($1)", [todo], (err: Error) => { if (err) { console.log("Error inserting todo", err); return; } console.log(`Inserted ${todo} successfully`); }); res.redirect("/"); }); // app.delete("/delete-todo/:todo", (req: Request, res: Response): void => { // //delete todo from postgres // }); app.listen(port, (): void => { console.log(`Server is running on port ${port}`); }); //Connect to postgres, postgres initialization pg.connect( (err: Error | undefined, client: PoolClient | undefined, done): void => { if (err) { console.log("Error connecting to pg", err); return; } if (!client) { console.log("No client found"); return; } // Attempt to Query (asking the database, to check it is connected), it might take us a while and we wont be able to run the rest of the program // Async this client.query("SELECT NOW()", async (err: Error, _result: any) => { if (err) { console.log("Error querying pg", err); return; } //Create the table if no error (await) //Query statement, instruction "CREATE TABLE IF NOT EXISTS todos", there is a whole table, https://www.w3schools.com/sql/default.asp //VACHAR is a string, 255 is the max length of the string await client.query( `CREATE TABLE IF NOT EXISTS todos ( todo VARCHAR(255) NOT NULL )`, (err: Error) => { console.log("Error creating table", err); return; } ); console.log("Connected to postgres successfully"); done(); }); } );