-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
132 lines (116 loc) · 3.68 KB
/
server.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
const express = require("express");
const app = express();
require("dotenv").config();
const id = process.env.ID;
const pw = process.env.PW;
const methodOverride = require("method-override");
app.use(methodOverride("_method"));
app.use(express.static(__dirname + "/public"));
app.set("view engine", "ejs");
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
const { MongoClient, ObjectId } = require("mongodb");
let db;
const url = `mongodb+srv://${id}:${pw}@cluster0.nmv3tex.mongodb.net/?retryWrites=true&w=majority`;
new MongoClient(url)
.connect()
.then((client) => {
console.log("DB연결성공");
db = client.db("forum");
app.listen(8080, () => {
console.log("http://localhost:8080 에서 서버 실행 중...");
});
})
.catch((err) => {
console.log(err);
});
app.get("/", (요청, 응답) => {
응답.sendFile(__dirname + "/index.html");
});
app.get("/news", (요청, 응답) => {
db.collection("post").insertOne({ title: "어쩌구" });
// 응답.send("오늘 비옴");
});
app.get("/list", async (요청, 응답) => {
let result = await db.collection("post").find().toArray();
console.log(result);
응답.render("list.ejs", { 글목록: result });
});
app.get("/time", (요청, 응답) => {
응답.render("time.ejs", { data: new Date() });
});
app.get("/write", (요청, 응답) => {
응답.render("write.ejs");
});
app.post("/add", async (요청, 응답) => {
console.log(요청.body);
try {
if (요청.body.title == "") {
응답.send("제목 입력 안 했는데?");
} else {
await db
.collection("post")
.insertOne({ title: 요청.body.title, content: 요청.body.content });
응답.redirect("/list");
}
} catch (e) {
console.log(e);
응답.status(500).send("서버 에러남"); // 500 : 서버 잘못으로 인한 에러라는 뜻
}
});
app.get("/detail/:id", async (요청, 응답) => {
try {
let result = await db
.collection("post")
.findOne({ _id: new ObjectId(요청.params.id) });
console.log(요청.params);
if (result == null) {
응답.status(400).send("이상한 url 입력함");
}
응답.render("detail.ejs", { result: result });
} catch (e) {
console.log(e);
응답.status(400).send("이상한 url 입력함"); // 4xx: 유저 문제
}
});
app.get("/edit/:id", async (요청, 응답) => {
let result = await db
.collection("post")
.findOne({ _id: new ObjectId(요청.params.id) });
응답.render("edit.ejs", { result: result });
});
app.put("/edit", async (요청, 응답) => {
await db.collection("post").updateOne({ _id: 1 }, { $inc: { like: 2 } });
// await db
// .collection("post")
// .updateOne(
// { _id: new ObjectId(요청.body.id) },
// { $set: { title: 요청.body.title, content: 요청.body.content } }
// );
// 응답.redirect("/list");
});
app.delete("/delete", async (요청, 응답) => {
console.log(요청.query);
await db
.collection("post")
.deleteOne({ _id: new ObjectId(요청.query.docid) });
응답.send("삭제완료");
});
// app.get("/list/:id", async (요청, 응답) => {
// let result = await db
// .collection("post")
// .find()
// .skip((요청.params.id - 1) * 5) // 큰 숫자 넣으면 수행 시간 오래 걸림
// .limit(5)
// .toArray();
// 응답.render("list.ejs", { 글목록: result });
// });
/* 장점 : 매우 빠름, 단점 : '다음' 버튼으로 바꿔야 함 */
app.get("/list/next/:id", async (요청, 응답) => {
let result = await db
.collection("post")
.find({ _id: { $gt: new ObjectId(요청.params.id) } })
.limit(5)
.toArray();
응답.render("list.ejs", { 글목록: result });
});