Dev.J
[REST API] Node.js로 Rest API 제작하기 - 2회차 본문
[2021.10.17 ~ 2021.10.19]
- id를 통해 user 데이터 가져오기
- put, delete 구현 (CRUD 중 Update, Delete)
- mongoDB 데이터베이스 만들기
- nodeJS와 mongoDB 연결
강의를 따라가며 언급된 기능들을 모두 구현해봤다. postman을 사용하여 편하게 서버의 작동 여부를 확인할 수 있었으며 mongoDB로 간단한 데이터베이스 모델을 만들어보고 mongoose를 사용해보기도 하였다.
하지만 모든 과정이 이해된 것은 아니다. 짧은 강의였음에도 왜 이 코드를 쓰는건지 모르고 따라 친 경우도 많았으며 아직 SQL, SQL과 API의 연결 과정 등 내가 수행한 다양한 과정에 대한 이해도가 부족하다는 것을 느꼈다.
원래는 강의를 마친 후 바로 내가 원하는 추가 기능을 만들어보려고했는데 내가 아는 것이 너무 없기도 하고 강의가 불친절한 면도 있어서 여타 이유로 다른 강의나 레퍼런스를 더 참고한 후에 만들게 되지 않을까 싶다.
[/api_ver1/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
|
const express = require('express');
//bodyParser : 현재 있는 데이터들을 제이슨 포멧으로 읽을 수 있게 도와주는 것
const bodyParser = require('body-parser');
const server = express();
// 2021.10.17 CRUD중 create read 이행(get post)
// 이제 update를 할 것
// bodyParser을 사용 가능하게 해줌.
server.use(bodyParser.json());
// 2. array를 사용해서 간단한 두 유저 생성
const users = [
{
id:"qewr",
name:"Jacky",
email:"jacky12@gmail.com",
},
{
id:"asdf",
name:"Lucy",
email:"lucy34@gmail.com",
}
];
// 3. 엔드 포인트 만들기(서버에서 클라이언트로 보내기)
// /api/user 요청이 온 경우 응답으로 제이슨 포멧의 유저들 데이터를 불러옴
server.get('/api/user',(req,res)=>{
res.json(users);
});
server.get('/api/user/:id',(req,res) =>{
const user = users.find(u => {
return u.id === req.params.id;
});
if(user){
res.json(user);
}else{
res.status(404).json({errorMessage: 'User was not found'});
}
});
server.post("/api/user", (req,res) =>{
users.push(req.body); //body로 받은 object를 users 데이터에 추가
res.json(users);
});
server.put('/api/user/:id',(req,res) => {
// find로 index 찾기 > findIndex 사용
let foundIndex = users.findIndex(u => u.id === req.params.id);
if(foundIndex === -1){
res.status(404).json({errorMessage: 'User was not found'});
}else{
// ...은 현재 있는 위치의 오브젝트값을 전부 복사한다는 의미 : 확실하지않음 이 사람이 말 이상하게함
users[foundIndex] = {...users[foundIndex], ...req.body}
res.json(users[foundIndex]);
}
});
server.delete('/api/user/:id',(req,res) =>{
let foundIndex = users.findIndex(u => u.id === req.params.id);
if(foundIndex === -1){
res.status(404).json({errorMessage: 'User was not found'});
}else{
// 함수 splice 를 이용해 foundIndex부터 1만큼 지우는 작업
let foundUser = users.splice(foundIndex,1);
res.json(foundUser[0]); // 삭제된 데이터 보여주기
}
});
// 1. 서버를 듣기위해
server.listen(3000,()=>{
console.log('The server is running');
});
|
cs |
[/REST-API/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
|
const express = require('express');
const mongoose = require('mongoose');
const server = express(); // 실행할 수 있는 서버를 만듬
const User = require('./models/User');
const dotenv = require('dotenv').config({path:'variables.env'});
server.get("/", (req,res) =>{
const newUser = new User();
newUser.email = "danny@gmmail.com";
newUser.name = "danny";
newUser.age = 25;
newUser.save() // promise
.then((user) =>{
console.log(user);
res.json({
message: 'User Created Successfully'
});
})
.catch((err)=>{
res.json({
message:err.toString()
});
});
});
server.listen(3000, (err) => { // 콜백함수
if(err){
return console.log(err);
} else{ // 서버가 완료되면 실제 DB 연결
mongoose.connect(process.env.MONGODB_URL, { useNewUrlParser: true}, (err) =>{
if(err){
console.log(err);
}else{
console.log('Connected to database successfully');
}
});
}
});
// 데이터를 서버로 불러오는 대신 env는 깃에 업로드되지 않음 > 노출이 되면 안되는 데이터를 env에 넣음으로써 보안 강화
process.env
|
cs |
[/REST-API/models/User.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
|
const mongoose = require('mongoose');
const { Schema } = mongoose.Schema(); // Object destructuring
const userSchema = new Schema(
{
email:{
type: String,
required: true,
},
name: String,
age:{
type: Number,
min: 18,
max: 50
}
// enrolled:{ // 언제 가입했는지
// type: Date,
// default: Date.now
// }
},
{
// 주석 처리된 부분을 간략화 한것. 데이터를 언제 생성했는지 기록, 유저스키마가 업데이트될 경우 최근 업데이트 일시 또한 기록.
timestamps: true
}
);
module.exports = mongoose.model('User', userSchema);
|
cs |
(마지막 코드는 mongoose TypeError: Schema is not a constructor 오류가 발생했는데 아직 해결하지 못했다.. 해결법 아시는 분 있으시면 연락주세요..^^;)
728x90
'Programming > Node.js' 카테고리의 다른 글
[REST API] Node.js로 Rest API 제작하기 - 1회차 (0) | 2021.10.15 |
---|