Skip to content

📋 PERN full stack todo app using PostgreSQL as a backend database with Express middleware React as the frontend and Node.js as the backend server. deployed to Heroku. Tutorial code by The Stoic Programmers (see 'Inspiration' below)

Notifications You must be signed in to change notification settings

AndrewJBateman/pern-stack-todo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ PERN Full Stack Todo

  • PostgreSQL Express React Node (PERN) full-stack app, integrates React frontend with Node.js backend that is deployed to Heroku. Tutorial code by The Stoic Programmers (see 'Inspiration' below)
  • Note: to open web links in a new window use: ctrl+click on link

GitHub repo size GitHub pull requests GitHub Repo stars GitHub last commit

📄 Table of contents

📚 General info

Backend

  • PostgreSQL needs to be installed and running - I started it from my Windows 10 PostgreSQL 12 dropdown option 'SQL shell (psql)'
  • Postman used to test the backend before frontend was available

Frontend

  • React frontend includes a simple todo list with a user input field and a table of todos below. User can edit and delete todos
  • JavaScript XML (JSX) used to write HTML elements in Javascript
  • React Fragments used to show table of todos as a row with columns in the DDM

📷 Screenshots

Backend screenshot Frontend & backend screenshot Frontend screenshot

📶 Technologies - Backend

📶 Technologies - Frontend

💾 Dev Setup - Backend

  • Install dependencies using npm i
  • Install nodemon globally if you don't already have it
  • Install PostgreSQL & run it (requires the password you created during installation)
  • Add database access credentials to db.js - recommend installing npm dotenv & using .env to hide credentials if commiting to Github
  • Postgresql shell commands: \l list all databases. \c database1 connect to database1. \dt inspect tables. \d+ inspect table & show relation information. \q to quit
  • From root run nodemon server for a dev server
  • http://localhost:5000/ can be accessed for CRUD operations such as POST, GET, PUT, DELETE etc. using Postman

💾 Dev Setup - Frontend

  • Change to client directory
  • Install dependencies using npm i.
  • run npm start. Frontend will open at http://localhost:3000/

💾 To Deploy to Heroku

  • Assumes you have Heroku installed
  • Server folder contents moved to root directory. Heroku must see package.json in root
  • db.js includes ternery expression to choose connection config
  • package.json (server) heroku-postbuild script added
  • Heroku scripts order: heroku pre-build, npm install, heroku-postbuild, run start script
  • client files edited: change to use proxy for dev address
  • Once package.json scripts added and you are logged into Heroku:
  • Create project: heroku create pern-stack-todoapp
  • Add Heroku database addon: heroku addons:create heroku-postgresql:hobby-dev -a pern-stack-todoapp
  • To access Heroku database: pg:psql -a pern-stack-todoapp
  • Run git add . then git commit -m "code added for Heroku deployment" to add all changes
  • Run heroku git:remote -a pern-stack-todoapp - this is my example
  • Run git push heroku master to send app to Heroku
  • Run heroku open to open app in a browser window

💻 Code Examples - Backend

  • backend index.js: express post method used to add new todo [description] to postgreSQL database using SQL INSERT INTO statement
// create a todo
app.post('/todos', async (req, res) => {
  try {
    const { description } = req.body;
    const newTodo = await pool.query(
      "INSERT INTO todo (description) VALUES($1) RETURNING *",
      [description]
    );

    res.json(newTodo.rows[0]);
  } catch (err) {
    console.error(err.message);
  }
})

💻 Code Examples - Frontend

  • function that runs when user presses 'Add' button: the input body (description) is converted from a JavaScript object to a JSON string & POSTed to the todo database
  const onSubmitForm = async e => {
    e.preventDefault();
    try {
      const body = { description };
      const response = await fetch("http://localhost:5000/todos", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(body)
      });

      console.log("Successfully added todo: ", response);
      window.location = "/";
    } catch (err) {
      console.error(err.message);
    }
  };

🆒 Features - Backend

  • All data stored in PostgreSQL database that can also be viewed and changed from the PostgreSQL shell (psql)

🆒 Features - Frontend

📋 Status & To-Do List

  • Status: Working & deployed to Heroku.
  • To-Do: Add commenting. Add npm concurrently to run front & back ends with 1 command. Add functionality. Order todos so recent one is top.

👏 Inspiration/General Tools

📁 License

  • This project is licensed under the terms of the MIT license.

✉️ Contact

About

📋 PERN full stack todo app using PostgreSQL as a backend database with Express middleware React as the frontend and Node.js as the backend server. deployed to Heroku. Tutorial code by The Stoic Programmers (see 'Inspiration' below)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published