-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
142 lines (113 loc) · 3.62 KB
/
app.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//requiring our modules express, body-parser,ejs, mongoose,querystring
const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const mongoose = require('mongoose');
const { stringify } = require("querystring");
//express app
const app = express();
//mongodb connection
mongoose.connect('mongodb://localhost:27017/wikiDB', { useNewUrlParser: true });
//ejs app
app.set('view engine', 'ejs');
//body-parser explicit code
app.use(bodyParser.urlencoded({
extended: true
}));
//static files in public folder
app.use(express.static("public"));
//mongoose schems
const articleSchema = ({
title: String,
content: String
});
//mongoose model
const articleModel = mongoose.model("article", articleSchema);
//////////////////////////////////////////request targetting articles route aong with cahined routing///////////////////////////////////////////////////////////////////////
//chained routing
app.route("/articles")
.get(function(req, res) {
//get = read
articleModel.find(function(err, foundArticles) {
if (!err) {
res.send(foundArticles);
} else {
res.send(err);
}
});
})
.post(function(req, res) {
//post = create
const newArticle = new articleModel({
//use postman for keys as title and name
title: (req.body.title),
content: (req.body.content)
});
newArticle.save(function(err) {
if (!err) {
res.send("successfully added a new article")
} else {
res.send(err);
}
});
})
.delete(function(req, res) {
//delete = delete (same like get route)
articleModel.deleteMany(function(err) {
if (!err) {
res.send("successfully deleted all the articles")
} else {
res.send(err);
}
});
});
//////////////////////////////////////// requests targetting a specific article /////////////////////////////////////////////////////////////////////////////
app.route("/articles/:articleTitle")
.get(function(req, res) {
const articleTitle = req.params.articleTitle;
articleModel.findOne({ title: articleTitle }, function(err, article) {
if (article) {
const jsonArticle = JSON.stringify(article);
res.send(jsonArticle);
} else {
res.send("No article with that title found.");
}
});
})
.patch(function(req, res) {
const articleTitle = req.params.articleTitle;
articleModel.update({ title: articleTitle }, { content: req.body.newContent },
function(err) {
if (!err) {
res.send("Successfully updated selected article.");
} else {
res.send(err);
}
});
})
.put(function(req, res) {
const articleTitle = req.params.articleTitle;
articleModel.update({ title: articleTitle }, { content: req.body.newContent }, { overwrite: true },
function(err) {
if (!err) {
res.send("Successfully updated the content of the selected article.");
} else {
res.send(err);
}
});
})
.delete(function(req, res) {
const articleTitle = req.params.articleTitle;
LostPet.findOneAndDelete({ title: articleTitle }, function(err) {
if (!err) {
res.send("Successfully deleted selected article.");
} else {
res.send(err);
}
});
});
////////////////////////////////////////port///////////////////////////////////////////////////////////////////////////
//server port
app.listen(3000, function() {
console.log("Server started on port 3000");
});