From 6e568634a76728627fc36731ecb84a9530d81a6c Mon Sep 17 00:00:00 2001 From: Mikayla Dobson Date: Mon, 18 Apr 2022 17:20:02 -0500 Subject: [PATCH] handling for async logic in products.js --- db/Client.js | 4 +-- routes/API.js | 10 ++++++++ routes/products.js | 63 ++++++++++++++++++++++++++++++++++++++++++++-- routes/user.js | 59 +++++++++++++++++++++---------------------- server.js | 11 +++----- 5 files changed, 104 insertions(+), 43 deletions(-) create mode 100644 routes/API.js diff --git a/db/Client.js b/db/Client.js index 6341abe..350e3cf 100644 --- a/db/Client.js +++ b/db/Client.js @@ -1,7 +1,7 @@ const { Client } = require('pg'); -require('dotenv').config({ path: '../config.env' }); +require('dotenv').config({ path: './config.env' }); -const connectionString = 'postgres://mikayladobson@localhost/ecommerce_041822'; +const connectionString = process.env.CONNECTION; const client = () => { return new Client(connectionString); } diff --git a/routes/API.js b/routes/API.js new file mode 100644 index 0000000..10431bc --- /dev/null +++ b/routes/API.js @@ -0,0 +1,10 @@ +const express = require('express'); +const apiRouter = express.Router(); + +const userRouter = require('./user'); +const productsRouter = require('./products'); + +apiRouter.use('/users', userRouter); +apiRouter.use('/products', productsRouter); + +module.exports = apiRouter; \ No newline at end of file diff --git a/routes/products.js b/routes/products.js index 6bbbac4..0a7b964 100644 --- a/routes/products.js +++ b/routes/products.js @@ -1,8 +1,67 @@ const express = require('express'); const productsRouter = express.Router(); -productsRouter.route('/products').get((req, res) => { - res.send('all products'); +const client = require('../db/Client'); + +// route to get all products +productsRouter.route('/').get(async (req, res) => { + const newClient = client(); + + try { + newClient.connect() + .then(console.log('Success')); + const result = await newClient.query("SELECT * FROM products"); + res.send(result.rows); + } catch(e) { + console.log(e); + } finally { + newClient.end() + .then(console.log("Client disconnected.")); + } +}); + +// route to get a product by id +productsRouter.route('/:id').get(async (req, res) => { + const id = req.params.id; + + try { + newClient.connect((err) => { + if (err) throw err; + console.log("Connection successful."); + }); + + const result = await newClient.query(("SELECT * FROM products WHERE id = ($1)"), [id]); + res.send(result.rows); + } catch(e) { + console.log(e); + } finally { + newClient.end() + .then(console.log("Client disconnected.")); + } +}); + +// post a product from req.body +productsRouter.route('/').post(async (req, res) => { + const newClient = client(); + const { name, description, category, categoryID } = req.body; + + try { + newClient.connect((err) => { + if (err) { + throw err; + } else { + console.log("Connection successful.") + } + }); + + newClient.query(("INSERT INTO products (name, description, category, category_id) VALUES ($1, $2, $3, $4)"), [name, description, category, categoryID]); + res.sendStatus(204); + } catch(e) { + console.log(e); + } finally { + await newClient.end() + .then(console.log("Client disconnected.")); + } }); module.exports = productsRouter; \ No newline at end of file diff --git a/routes/user.js b/routes/user.js index a640b0d..adaee6b 100644 --- a/routes/user.js +++ b/routes/user.js @@ -4,44 +4,41 @@ const userRouter = express.Router(); const client = require('../db/Client'); // get a list of all users, or a single user matching an email passed in as a query param -userRouter.route('/users').get(async (req, res) => { +userRouter.route('/').get(async (req, res) => { const newClient = client(); + const { email } = req.query; - if (req.query) { - const { email } = req.query; - - if (!email) { - try { - await newClient.connect(); - console.log('Connection successful.'); - - const results = await newClient.query("SELECT * FROM users"); - res.send(results.rows); - } catch(e) { - console.log(e); - } finally { - await newClient.end(); - console.log("Client disconnected."); - } - } else { - try { - await newClient.connect() - .then(console.log("Connection successful.")); - - const result = await newClient.query(("SELECT * FROM users WHERE email = ($1)"), [email]) - res.send(result.rows); - } catch(e) { - console.log(e); - } finally { - await newClient.end() - .then(console.log("Client disconnected.")); - } + if (!email) { + try { + await newClient.connect() + .then(console.log('Connection successful.')); + + const results = await newClient.query("SELECT * FROM users"); + res.send(results.rows); + } catch(e) { + console.log(e); + } finally { + await newClient.end(); + console.log("Client disconnected."); + } + } else { + try { + await newClient.connect() + .then(console.log("Connection successful.")); + + const result = await newClient.query(("SELECT * FROM users WHERE email = ($1)"), [email]) + res.send(result.rows); + } catch(e) { + console.log(e); + } finally { + await newClient.end() + .then(console.log("Client disconnected.")); } } }); // post a new user to the database -userRouter.route('/users').post(async (req, res) => { +userRouter.route('/').post(async (req, res) => { const { name, email } = req.body; const newClient = client(); diff --git a/server.js b/server.js index 927d6d4..8ffbcb0 100644 --- a/server.js +++ b/server.js @@ -1,14 +1,13 @@ const express = require('express'); +const cors = require('cors'); const app = express(); - const bodyParser = require('body-parser'); +const apiRouter = require('./routes/API'); require('dotenv').config({ path: './config.env' }); const PORT = process.env.PORT; -const cors = require('cors'); - app.use(cors()); app.use(express.json()); @@ -17,11 +16,7 @@ app.use(bodyParser.urlencoded({ extended: true })); -app.use(require('./routes/checkout')); -app.use(require('./routes/order')); -app.use(require('./routes/products')); -app.use(require('./routes/user')); -app.use(require('./routes/cart')); +app.use('/api', apiRouter); app.listen(PORT, () => { console.log(`Listening on port ${PORT}`);