-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
176 lines (144 loc) · 5.48 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
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
const express = require("express"); //express 모듈을 가져온다.
const app = express(); // 모듈의 펑션을 이용해서 새로운 express APP을 생성한다
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const config = require("./server/config/key");
const { auth } = require("./server/middleware/auth");
const { User } = require("./server/models/User");
//application/x-www-form-urlencoded
/*app.use(bodyParser.urlencoded({ extended: true }));
//application/json
app.use(bodyParser.json());
app.use(cookieParser());
const mongoose = require("mongoose");
mongoose
.connect(config.mongoURI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
})
.then(() => console.log("MongoDB Connected...")) //질 연결되었는지 확인
.catch((err) => console.log(err)); // 에러 발생하면 알려줌
app.get("/", (req, res) => res.send("JS가 좋니"));
app.post('/register', (req, res) => {
//회원 가입 할떄 필요한 정보들을 client에서 가져오면
//그것들을 데이터 베이스에 넣어준다.
const user = new User(req.body)
user.save((err, userInfo) => {
if (err) return res.json({ success: false, err })
return res.status(200).json({
success: true
})
})
})
app.post('/login', (req,res) =>{
//요청된 이메일을 데이터베이스에서 찾는다.
User.findOne({email: req.body.email},(err, user) =>{
//이메일이 없을 경우(유저 없음)
if(!user){
return res.json({
loginSuccess: false,
message: "제공된 이메일에 해당하는 유저가 없습니다."
})
}
//요청된 이메일이 데이터베이스에 있다면 비밀번호가 맞는 비밀번호인지 확인.
user.comparePassword( req.body.password, (err, isMatch)=>{
if(!isMatch)
return res.json({loginSuccess: false, message: "비밀번호가 틀렸습니다."})
//비밀번호까지 맞다면 토큰을 생성하기
user.generateToken((err, user) => {
if(err) return res.status(400).send(err); //에러가 있다는 걸 클라이언트에 보냄 .
//토큰을 저장한다. 어디에? 쿠키, 로컬 스토리지...
res.cookie("x_auth",user.token)
.status(200) //접속 성공 표시
.json({loginSuccess: true, userID: user._id}) //데이터 보내줌
})
})
})
})*/
/*John Ahn 님 예제 */
//application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
//application/json
app.use(bodyParser.json());
app.use(cookieParser());
const mongoose = require("mongoose");
mongoose
.connect(config.mongoURI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
})
.then(() => console.log("MongoDB Connected..."))
.catch((err) => console.log(err));
app.get("/", (req, res) => res.send("Hello World!~~ "));
app.get('/api/hello', (req, res) => res.send('Hello World!~~ '))
app.post("/api/users/register", (req, res) => {
//회원 가입 할떄 필요한 정보들을 client에서 가져오면
//그것들을 데이터 베이스에 넣어준다.
const user = new User(req.body);
user.save((err, userInfo) => {
//콜백함수로 에러와 받은 정보를 넘긴다.
if (err) return res.json({ success: false, err })
return res.status(200).json({
success: true,
})
})
})
app.post("/api/users/login", (req, res) => {
//요청된 이메일을 데이터베이스에서 있는지 찾는다.
User.findOne({ email: req.body.email }, (err, user) => {
if (!user) {
return res.json({
loginSuccess: false,
message: "제공된 이메일에 해당하는 유저가 없습니다.",
})
}
//요청된 이메일이 데이터 베이스에 있다면 비밀번호가 맞는 비밀번호 인지 확인.
user.comparePassword(req.body.password, (err, isMatch) => {
console.log("err", err);
console.log("isMatch", isMatch);
if (!isMatch)
return res.json({
loginSuccess: false,
message: "비밀번호가 틀렸습니다.",
});
//비밀번호 까지 맞다면 토큰을 생성하기.
user.generateToken((err, user) => {
if (err) return res.status(400).send(err);
// 토큰을 저장한다. 어디에 ? 쿠키 , 로컳스토리지
res
.cookie("x_auth", user.token)
.status(200)
.json({ loginSuccess: true, userId: user._id });
});
});
});
});
app.get('/api/users/auth', auth, (req, res) => {
//여기까지 미들웨어를 통과해 왔다는 이야기는 Authentication이 true
//True라는 걸 client에게 전달해줘야 함.
res.status(200).json({
_id: req.user._id,
isAdmin: req.user.role === 0 ? false : true, //Admin유저인지. 현재는 role 0 이 일반유저 니머지는 Admin
isAuth: true,
email: req.user.email,
name: req.user.name,
lastname: req.user.lastname,
role: req.user.role,
image: req.user.image,
})
})
app.get("/api/users/logout", auth, (req, res) => {
//로그아웃하려는 유저 모델을 찾아서 업데이트한다.
User.findOneAndUpdate({ _id: req.user._id }, { token: "" }, (err, user) => {
if (err) return res.json({ success: false, err });
return res.status(200).send({
success: true,
})
})
})
const port = 5000;
app.listen(port, () => console.log(`Example app listening on port ${port}!`)); //5000번 포트에서 앱 실행