-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
104 lines (91 loc) · 2.81 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import express from "express";
import bodyParser from "body-parser";
import ejs from "ejs";
import _ from "lodash";
import mongoose from "mongoose";
const app = express();
const port = 4000;
mongoose.connect("mongodb+srv://velamalakarthik2003:[email protected]/Blogdb?retryWrites=true&w=majority");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static("public"));
app.set('view engine', 'ejs');
// Define Post Schema and Model with 'pid' (custom post ID)
const postSchema = new mongoose.Schema({
pid: Number,
title: String,
content: String,
author: String,
date: { type: Date, default: Date.now }
});
const Post = mongoose.model("Post", postSchema);
// CHALLENGE 1: GET All posts
app.get('/posts', (req, res) => {
Post.find({}).then(function(posts) {
res.json(posts);
}).catch(function(err) {
res.status(500).json({ error: err });
});
});
// CHALLENGE 2: GET a specific post by 'pid'
app.get('/posts/:pid', (req, res) => {
const pid = parseInt(req.params.pid);
Post.findOne({ pid: pid }).then(function(post) {
if (post) {
res.json(post);
} else {
res.status(404).json({ error: "Post not found" });
}
}).catch(function(err) {
res.status(500).json({ error: err });
});
});
// CHALLENGE 3: POST a new post
app.post('/posts', (req, res) => {
// Find the highest 'pid' to increment it for the new post
Post.findOne().sort({ pid: -1 }).then(function(lastPost) {
const newPid = lastPost ? lastPost.pid + 1 : 1;
const newPost = new Post({
pid: newPid,
title: req.body.title,
content: req.body.content,
author: req.body.author
});
newPost.save().then(function(post) {
res.json(post);
}).catch(function(err) {
res.status(500).json({ error: err });
});
}).catch(function(err) {
res.status(500).json({ error: err });
});
});
// CHALLENGE 4: PATCH a post when you just want to update one parameter using 'pid'
app.patch('/posts/:pid', (req, res) => {
const pid = parseInt(req.params.pid);
Post.findOneAndUpdate({ pid: pid }, req.body, { new: true }).then(function(post) {
if (post) {
res.json(post);
} else {
res.status(404).json({ error: "Post not found" });
}
}).catch(function(err) {
res.status(500).json({ error: err });
});
});
// CHALLENGE 5: DELETE a specific post by providing the 'pid'
app.delete('/posts/:pid', (req, res) => {
const pid = parseInt(req.params.pid);
Post.findOneAndDelete({ pid: pid }).then(function(post) {
if (post) {
res.json({ message: "Post deleted" });
} else {
res.status(404).json({ error: "Post not found" });
}
}).catch(function(err) {
res.status(500).json({ error: err });
});
});
app.listen(port, () => {
console.log(`API is running at http://localhost:${port}`);
});