diff --git a/server.js b/server.js index 58b53e2f..ad6ed3f7 100644 --- a/server.js +++ b/server.js @@ -1,10 +1,11 @@ -const express = require('express') -const app = express() -const MongoClient = require('mongodb').MongoClient -const PORT = 2121 +// download express, mongodb +const express = require('express'); +const app = express(); +const MongoClient = require('mongodb').MongoClient; +const PORT = 2121; require('dotenv').config() - +// connect to mongodb let db, dbConnectionStr = process.env.DB_STRING, dbName = 'todo' @@ -14,80 +15,79 @@ MongoClient.connect(dbConnectionStr, { useUnifiedTopology: true }) console.log(`Connected to ${dbName} Database`) db = client.db(dbName) }) - + +// middleware setup for ejs, public folders, decode stuff and json app.set('view engine', 'ejs') app.use(express.static('public')) app.use(express.urlencoded({ extended: true })) app.use(express.json()) - -app.get('/',async (request, response)=>{ +// home route -> get latest db stuff to render on homepage +app.get('/', async (request, response) => { const todoItems = await db.collection('todos').find().toArray() - const itemsLeft = await db.collection('todos').countDocuments({completed: false}) - response.render('index.ejs', { items: todoItems, left: itemsLeft }) - // db.collection('todos').find().toArray() - // .then(data => { - // db.collection('todos').countDocuments({completed: false}) - // .then(itemsLeft => { - // response.render('index.ejs', { items: data, left: itemsLeft }) - // }) - // }) - // .catch(error => console.error(error)) + const itemsLeft = await db.collection('todos').countDocuments({ completed: false }) + response.render('index.ejs', { items: todoItems, left: itemsLeft }); }) +// send a post request to mongodb app.post('/addTodo', (request, response) => { - db.collection('todos').insertOne({thing: request.body.todoItem, completed: false}) - .then(result => { - console.log('Todo Added') - response.redirect('/') - }) - .catch(error => console.error(error)) + db.collection('todos').insertOne({ thing: request.body.todoItem, completed: false }) + .then(result => { + console.log('Todo Added') + response.redirect('/') + }) + .catch(error => console.error(error)) }) +// update completed property to true on a todo item app.put('/markComplete', (request, response) => { - db.collection('todos').updateOne({thing: request.body.itemFromJS},{ + db.collection('todos').updateOne({ thing: request.body.itemFromJS }, { $set: { completed: true - } - },{ - sort: {_id: -1}, + } + }, { + sort: { _id: -1 }, upsert: false }) - .then(result => { - console.log('Marked Complete') - response.json('Marked Complete') - }) - .catch(error => console.error(error)) + .then(result => { + console.log('Marked Complete') + response.json('Marked Complete') + }) + .catch(error => console.error(error)) }) + +// update completed property to false on a todo item app.put('/markUnComplete', (request, response) => { - db.collection('todos').updateOne({thing: request.body.itemFromJS},{ + db.collection('todos').updateOne({ thing: request.body.itemFromJS }, { $set: { completed: false - } - },{ - sort: {_id: -1}, + } + }, { + sort: { _id: -1 }, upsert: false }) - .then(result => { - console.log('Marked Complete') - response.json('Marked Complete') - }) - .catch(error => console.error(error)) + .then(result => { + console.log('Marked Complete') + response.json('Marked Complete') + }) + .catch(error => console.error(error)) }) +// delete a todoItem from db app.delete('/deleteItem', (request, response) => { - db.collection('todos').deleteOne({thing: request.body.itemFromJS}) - .then(result => { - console.log('Todo Deleted') - response.json('Todo Deleted') - }) - .catch(error => console.error(error)) + db.collection('todos').deleteOne({ thing: request.body.itemFromJS }) + .then(result => { + console.log('Todo Deleted') + response.json('Todo Deleted') + }) + .catch(error => console.error(error)) }) -app.listen(process.env.PORT || PORT, ()=>{ +// set up app to listen on port 2121 +app.listen(process.env.PORT || PORT, () => { console.log(`Server running on port ${PORT}`) }) \ No newline at end of file