diff --git a/index.js b/index.js
index 5b30cab07..bac70e20c 100644
--- a/index.js
+++ b/index.js
@@ -1 +1,6 @@
// code away!
+const server = require('./server.js');
+
+server.listen(4000, () => {
+ console.log('\n* Server Running on http://localhost:4000 *\n');
+});
\ No newline at end of file
diff --git a/package.json b/package.json
index d87f90800..7a7903fa5 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,9 @@
"homepage": "https://github.com/LambdaSchool/node-api3-project#readme",
"dependencies": {
"express": "^4.17.1",
+ "helmet": "^4.0.0",
"knex": "^0.21.2",
+ "morgan": "^1.10.0",
"sqlite3": "^5.0.0"
},
"devDependencies": {
diff --git a/server.js b/server.js
index cedbcc746..74346cac0 100644
--- a/server.js
+++ b/server.js
@@ -1,13 +1,28 @@
-const express = require('express');
+const express = require("express");
+const helmet = require("helmet");
const server = express();
-server.get('/', (req, res) => {
- res.send(`
Let's write some middleware!
`);
+server.use(express.json());
+server.use(helmet());
+// server.use(logger);
+
+const usersRouter = require("./users/userRouter");
+const postsRouter = require("./posts/postRouter");
+
+server.use("/api/users", usersRouter);
+server.use("/api/posts", postsRouter);
+
+server.get("/", (req, res) => {
+ res.send(`Let"s write some middleware!
`);
});
//custom middleware
-function logger(req, res, next) {}
+function logger(req, res, next) {
+ let timeStamp = new Date().toLocaleDateString;
+ console.log(`Method: ${req.method} / URL: ${req.url} / Time: ${timeStamp}`);
+ next();
+}
module.exports = server;
diff --git a/users/userRouter.js b/users/userRouter.js
index 3bb2a79c0..7b3aba3d9 100644
--- a/users/userRouter.js
+++ b/users/userRouter.js
@@ -1,47 +1,142 @@
const express = require('express');
-
const router = express.Router();
+const Users = require("./userDb.js");
+const Posts = require("./../posts/postDb.js");
+// const user = {
+// id: "",
+// name: ""
+// }
+// const users = [];
-router.post('/', (req, res) => {
- // do your magic!
+router.post("/", validateUser, async (req, res) => {
+ try {
+ const newUser = await Users.insert(req.body);
+ if (newUser) {
+ res.status(201).json(newUser)
+ } else {
+ res.status(500).json({ message: "unable to add user" });
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
});
-router.post('/:id/posts', (req, res) => {
+router.post('/:id/posts', validateUserId, validatePost, async (req, res) => {
// do your magic!
+ try {
+ const newPost = await Posts.insert({ user_id:req.params.id, ...req.body });
+ if (newPost) {
+ res.status(201).json(newPost)
+ } else {
+ res.status(500).json({ message: "unable to add post" });
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
});
-router.get('/', (req, res) => {
+router.get('/', async (req, res) => {
// do your magic!
+ try {
+ const getUsers = await Users.get();
+ if (getUsers.length > 0) {
+ res.status(201).json(getUsers)
+ } else {
+ res.status(500).json({ message: "no users yet" });
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
});
-router.get('/:id', (req, res) => {
+router.get('/:id', validateUserId, async(req, res) => {
// do your magic!
+ try {
+ const getUser = await Users.getById(req.params.id);
+ if (getUser) {
+ res.status(201).json(getUser)
+ } else {
+ res.status(500).json({ message: "no such user" });
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
});
-router.get('/:id/posts', (req, res) => {
+router.get('/:id/posts', validateUserId, async(req, res) => {
// do your magic!
+ try {
+ const userPosts = await Users.getUserPosts(req.params.id);
+ if (userPosts) {
+ res.status(201).json(userPosts)
+ } else {
+ res.status(500).json({ message: "no posts yet" });
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
});
-router.delete('/:id', (req, res) => {
+router.delete('/:id', validateUserId, async(req, res) => {
// do your magic!
+ try {
+ const deleteUser = await Users.remove(req.params.id);
+ if (deleteUser) {
+ res.status(201).end()
+ } else {
+ res.status(500).json({ message: "could not delete user" });
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
});
-router.put('/:id', (req, res) => {
+router.put('/:id', validateUserId, validateUser, async(req, res) => {
// do your magic!
+ try {
+ const editUser = await Users.update(req.params.id, req.body);
+ if (editUser) {
+ res.status(201).json(editUser)
+ } else {
+ res.status(500).json({ message: "could not edit user" });
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
});
//custom middleware
-function validateUserId(req, res, next) {
+async function validateUserId(req, res, next) {
// do your magic!
+ try {
+ const getUserById = await Users.getById(req.params.id);
+ if (getUserById){
+ next()
+ } else {
+ res.status(400).json({message: "no user with this id"})
+ }
+ } catch (error) {
+ res.status(500).json({ error: error.message });
+ }
}
function validateUser(req, res, next) {
// do your magic!
+ if (req.body.name) {
+ next()
+ } else {
+ res.status(400).json({ message: "provide user name" });
+ }
}
function validatePost(req, res, next) {
// do your magic!
+ if (req.body.text) {
+ next()
+ } else {
+ res.status(400).json({ message: "provide post text" });
+ }
}
module.exports = router;