Dev.J

[REST API] Node.js로 Rest API 제작하기 - 2회차 본문

Programming/Node.js

[REST API] Node.js로 Rest API 제작하기 - 2회차

JJ____ 2021. 10. 20. 15:48

[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,
    },
    nameString,
    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