Tutorial 08
Build the Phone Book web app we covered in Week 08. You need to build both the front-end and back-end.
Add Contact:
List Contacts:
Solution
new_contact.js
:
const init = async function () {
const formEl = document.querySelector("#form")
formEl.addEventListener("submit", async (event) => {
event.preventDefault()
// grab the data from the form
const data = new FormData(formEl)
const objectData = Object.fromEntries(data)
// backend must be running already
const res = await fetch("http://localhost:3000/contacts", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(objectData),
})
})
}
init()
contacts.js
:
const init = async function () {
const gridEl = document.querySelector("div.grid")
// backend must be running already
const res = await fetch("http://localhost:3000/contacts")
const data = await res.json()
const keys = Object.keys(data)
console.log(keys)
keys.forEach((objectKey) => {
const phoneNumber = objectKey
const name = data[objectKey]
const cellEl = document.createElement("div")
cellEl.classList.add("cell") // <div class="cell"></div>
const innerH = `
<div class="card">
<div class="card-content">
<div class="content">
<div class="title">${name}</div>
<p class="subtitle">${phoneNumber}</p>
<button class="button is-small is-danger has-text-white">Delete</button>
</div>
</div>
</div>
`
cellEl.innerHTML = innerH
gridEl.append(cellEl)
})
}
init()
index.js
(backend)
const express = require('express') // import express
const app = express() // initializing express
const cors = require('cors') // importing cors
const port = 3000 // the port that the web server will run on
const phoneBook = {
}
// this will allow ALL origins to use this backend
app.use(cors())
app.use(express.json());
// to get ALL contacts
app.get('/contacts', (req, res) => {
console.log("GET /contact was called")
res.send(phoneBook)
})
// to create a contact
app.post('/contacts', (req, res) => {
phoneBook[req.body.phone_number] = req.body.name
console.log(phoneBook)
res.send(phoneBook)
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})