From a6de70d4cebcaee53759487fc71a0370de713552 Mon Sep 17 00:00:00 2001 From: Alieze-Ali <71855821+Alieze-Ali@users.noreply.github.com> Date: Tue, 7 Dec 2021 18:48:13 -0800 Subject: [PATCH 1/7] first commit --- index.js | 1 + package-lock.json | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 602039f1b..f422985e8 100644 --- a/index.js +++ b/index.js @@ -1 +1,2 @@ // require your server and launch it +console.log('Hello World!') diff --git a/package-lock.json b/package-lock.json index a073034f1..955d741ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,6 @@ "requires": true, "packages": { "": { - "name": "node-api3-project", "version": "1.0.0", "dependencies": { "express": "^4.17.1", @@ -1851,6 +1850,7 @@ "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", + "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", @@ -2479,7 +2479,8 @@ "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2", - "optionator": "^0.8.1" + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "bin": { "escodegen": "bin/escodegen.js", @@ -4083,6 +4084,7 @@ "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", + "fsevents": "^2.3.2", "graceful-fs": "^4.2.4", "jest-regex-util": "^27.4.0", "jest-serializer": "^27.4.0", @@ -6238,6 +6240,7 @@ "hasInstallScript": true, "dependencies": { "node-addon-api": "^3.0.0", + "node-gyp": "3.x", "node-pre-gyp": "^0.11.0" }, "optionalDependencies": { From 1748eccfd23e83592de805af9b8af97aa9b728a4 Mon Sep 17 00:00:00 2001 From: Alieze-Ali <71855821+Alieze-Ali@users.noreply.github.com> Date: Tue, 7 Dec 2021 19:14:25 -0800 Subject: [PATCH 2/7] launched server --- index.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/index.js b/index.js index f422985e8..16099d5d2 100644 --- a/index.js +++ b/index.js @@ -1,2 +1,7 @@ // require your server and launch it console.log('Hello World!') + const server = require('./api/server') + const PORT = 5000 + server.listen(PORT, () => { + console.log('listening on' , PORT) + }) \ No newline at end of file From b1774e5a51ff20f2a6b9c1c31a6f11cb5e53767d Mon Sep 17 00:00:00 2001 From: Alieze-Ali <71855821+Alieze-Ali@users.noreply.github.com> Date: Tue, 7 Dec 2021 19:28:29 -0800 Subject: [PATCH 3/7] logger middleware installed --- api/middleware/middleware.js | 14 ++++++++++++++ api/server.js | 4 +++- index.js | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/api/middleware/middleware.js b/api/middleware/middleware.js index 0cceb716a..9a77fd57d 100644 --- a/api/middleware/middleware.js +++ b/api/middleware/middleware.js @@ -1,17 +1,31 @@ function logger(req, res, next) { // DO YOUR MAGIC + console.log('logger middleware') + next() } function validateUserId(req, res, next) { // DO YOUR MAGIC + console.log('validateUserId middleware') + next() } function validateUser(req, res, next) { // DO YOUR MAGIC + console.log('validateUser middleware') + next() } function validatePost(req, res, next) { // DO YOUR MAGIC + console.log('validatePost middleware') + next() } // do not forget to expose these functions to other modules +module.exports = { + validateUserId, + validateUser, + validatePost, + logger, +} \ No newline at end of file diff --git a/api/server.js b/api/server.js index badc3026a..e789a0e7e 100644 --- a/api/server.js +++ b/api/server.js @@ -1,8 +1,10 @@ const express = require('express'); - +const { logger } = require('./middleware/middleware') const server = express(); // remember express by default cannot parse JSON in request bodies +server.use(express.json()) +server.use(logger) // global middlewares and the user's router need to be connected here diff --git a/index.js b/index.js index 16099d5d2..9e9ab19df 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,5 @@ // require your server and launch it -console.log('Hello World!') +// console.log('Hello World!') const server = require('./api/server') const PORT = 5000 server.listen(PORT, () => { From e3feba6107b68d272dad10590b192b579de40380 Mon Sep 17 00:00:00 2001 From: Alieze-Ali <71855821+Alieze-Ali@users.noreply.github.com> Date: Tue, 7 Dec 2021 21:06:23 -0800 Subject: [PATCH 4/7] scaffolding for endpoints --- api/middleware/middleware.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/api/middleware/middleware.js b/api/middleware/middleware.js index 9a77fd57d..b3a1c2ddc 100644 --- a/api/middleware/middleware.js +++ b/api/middleware/middleware.js @@ -1,6 +1,9 @@ function logger(req, res, next) { - // DO YOUR MAGIC - console.log('logger middleware') + // DO YOUR MAGIC + const timeStamp = new Date().toLocaleString() + const method = req.method + const url = req.originalUrl + console.log(`[${timeStamp}] ${method} to ${url}`) next() } From 2999e6297dca086a8b3022fe107ef9a8a0f6bdd4 Mon Sep 17 00:00:00 2001 From: Alieze-Ali <71855821+Alieze-Ali@users.noreply.github.com> Date: Tue, 7 Dec 2021 22:24:22 -0800 Subject: [PATCH 5/7] got more api sections working --- api/middleware/middleware.js | 37 +++++++++++++++++++++++++++++++----- api/server.js | 4 +++- api/users/users-router.js | 26 +++++++++++++++++++------ 3 files changed, 55 insertions(+), 12 deletions(-) diff --git a/api/middleware/middleware.js b/api/middleware/middleware.js index b3a1c2ddc..dad3eabcc 100644 --- a/api/middleware/middleware.js +++ b/api/middleware/middleware.js @@ -1,3 +1,5 @@ +const User = require('../users/users-model') + function logger(req, res, next) { // DO YOUR MAGIC const timeStamp = new Date().toLocaleString() @@ -7,16 +9,41 @@ function logger(req, res, next) { next() } -function validateUserId(req, res, next) { +async function validateUserId(req, res, next) { // DO YOUR MAGIC - console.log('validateUserId middleware') - next() + // console.log('validateUserId middleware') + try{ + const user = await User.getById(req.params.id) + if(!user){ + res.status(404).json({ + message: 'no such user', + }) + }else{ + req.user = user + next() + + } + }catch(err){ + res.status(500).json({ + message: 'problem finding user', + }) + } + } function validateUser(req, res, next) { // DO YOUR MAGIC - console.log('validateUser middleware') - next() + // console.log('validateUser middleware') + const { name } = req.body + if(!name || !name.trim()){ + res.status(400).json({ + message: 'missing required name field', + }) + }else{ + req.name= name.trim() + next() + } + } function validatePost(req, res, next) { diff --git a/api/server.js b/api/server.js index e789a0e7e..757007277 100644 --- a/api/server.js +++ b/api/server.js @@ -1,10 +1,12 @@ const express = require('express'); -const { logger } = require('./middleware/middleware') +const { logger } = require('./middleware/middleware'); const server = express(); +const usersRouter = require('./users/users-router'); // remember express by default cannot parse JSON in request bodies server.use(express.json()) server.use(logger) +server.use('/api/users', usersRouter); // global middlewares and the user's router need to be connected here diff --git a/api/users/users-router.js b/api/users/users-router.js index 9d8a0e278..d9204a1fb 100644 --- a/api/users/users-router.js +++ b/api/users/users-router.js @@ -1,4 +1,8 @@ const express = require('express'); +const { + validateUserId, + validateUser, +}=require('../middleware/middleware') // You will need `users-model.js` and `posts-model.js` both // The middleware functions also need to be required @@ -9,36 +13,46 @@ router.get('/', (req, res) => { // RETURN AN ARRAY WITH ALL THE USERS }); -router.get('/:id', (req, res) => { +router.get('/:id', validateUserId, (req, res) => { // RETURN THE USER OBJECT // this needs a middleware to verify user id + console.log(req.user) }); -router.post('/', (req, res) => { +router.post('/', validateUser, +(req, res) => { // RETURN THE NEWLY CREATED USER OBJECT // this needs a middleware to check that the request body is valid + console.log(req.name) }); -router.put('/:id', (req, res) => { +router.put('/:id', validateUserId, validateUser, +(req, res) => { // RETURN THE FRESHLY UPDATED USER OBJECT // this needs a middleware to verify user id // and another middleware to check that the request body is valid + console.log(req.user) + console.log(req.name) }); -router.delete('/:id', (req, res) => { +router.delete('/:id', validateUserId, (req, res) => { // RETURN THE FRESHLY DELETED USER OBJECT // this needs a middleware to verify user id + console.log(req.user) }); -router.get('/:id/posts', (req, res) => { +router.get('/:id/posts', validateUserId, (req, res) => { // RETURN THE ARRAY OF USER POSTS // this needs a middleware to verify user id + console.log(req.user) }); -router.post('/:id/posts', (req, res) => { +router.post('/:id/posts', validateUserId, (req, res) => { // RETURN THE NEWLY CREATED USER POST // this needs a middleware to verify user id // and another middleware to check that the request body is valid + console.log(req.user) }); // do not forget to export the router +module.exports = router From 44f99ca244b0196dd5927ef04f632a1f068eed0a Mon Sep 17 00:00:00 2001 From: Alieze-Ali <71855821+Alieze-Ali@users.noreply.github.com> Date: Wed, 8 Dec 2021 15:59:14 -0800 Subject: [PATCH 6/7] about 1/2 tests are passing --- api/middleware/middleware.js | 12 ++++++++++-- api/users/users-router.js | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/api/middleware/middleware.js b/api/middleware/middleware.js index dad3eabcc..33e8b67ca 100644 --- a/api/middleware/middleware.js +++ b/api/middleware/middleware.js @@ -48,8 +48,16 @@ function validateUser(req, res, next) { function validatePost(req, res, next) { // DO YOUR MAGIC - console.log('validatePost middleware') - next() + // console.log('validatePost middleware') + const { text } = req.body + if(!text || !text.trim()){ + res.status(400).json({ + message: 'missing required text field', + }) + }else{ + req.text= text.trim() + next() + } } // do not forget to expose these functions to other modules diff --git a/api/users/users-router.js b/api/users/users-router.js index d9204a1fb..9e7d1aaf2 100644 --- a/api/users/users-router.js +++ b/api/users/users-router.js @@ -2,6 +2,7 @@ const express = require('express'); const { validateUserId, validateUser, + validatePost, }=require('../middleware/middleware') // You will need `users-model.js` and `posts-model.js` both @@ -47,11 +48,12 @@ router.get('/:id/posts', validateUserId, (req, res) => { console.log(req.user) }); -router.post('/:id/posts', validateUserId, (req, res) => { +router.post('/:id/posts', validateUserId, validatePost, (req, res) => { // RETURN THE NEWLY CREATED USER POST // this needs a middleware to verify user id // and another middleware to check that the request body is valid console.log(req.user) + console.log(req.text) }); // do not forget to export the router From a198e3c26dff551d3c699001dac68c0426637fcb Mon Sep 17 00:00:00 2001 From: Alieze-Ali <71855821+Alieze-Ali@users.noreply.github.com> Date: Wed, 8 Dec 2021 16:12:24 -0800 Subject: [PATCH 7/7] router.get endpoint functioning --- api/users/users-router.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/api/users/users-router.js b/api/users/users-router.js index 9e7d1aaf2..0984759a3 100644 --- a/api/users/users-router.js +++ b/api/users/users-router.js @@ -1,3 +1,4 @@ +// The middleware functions also need to be required const express = require('express'); const { validateUserId, @@ -6,12 +7,18 @@ const { }=require('../middleware/middleware') // You will need `users-model.js` and `posts-model.js` both -// The middleware functions also need to be required +const User = require("./users-model") +const Post = require('../posts/posts-model') const router = express.Router(); -router.get('/', (req, res) => { +router.get('/', (req, res, next) => { // RETURN AN ARRAY WITH ALL THE USERS + User.get() + .then(users=>{ + res.json(users) + }) + .catch(next) }); router.get('/:id', validateUserId, (req, res) => { @@ -56,5 +63,13 @@ router.post('/:id/posts', validateUserId, validatePost, (req, res) => { console.log(req.text) }); +router.use((err, req, res, next) => { + res.status(err.status || 500).json({ + customMessafe: 'something bad happened', + message: err.message, + stack: err.stack, + }) +}) + // do not forget to export the router module.exports = router