본문 바로가기
Web - 백엔드/Node.js

[ Node.js ] mLab을 이용한 MongoDB 연결 3 - CRUD 구현 (2)

by 미래문 2019. 1. 29.
반응형


 

 

UPDATE 동작은 CREATE 동작의 코드를 수정함으로써 구현할 수 있습니다. 수정된 app.post()코드는 아래와 같습니다.

app.post('/', (req, res) => {
    const studentFields = {};
  
    if (req.body.name) studentFields.name = req.body.name;
    if (req.body.score) studentFields.score = req.body.score;
  
    Student.findOne({
        name: req.body.name
    }).then(student => {
        if (student) {
            Student.findOneAndUpdate({
                name: req.body.name
            }, {
                $set: studentFields
            }, {
                new: true
            }).then(student => res.json(student)).catch(
                err => res.json(err));
        } else {
            new Student(studentFields).save().then(student =>
                res.json(student));
        }
    });
});

먼저 이전과는 다르게, req.body에서 넘어오는 인자가 있는지 없는지를 검사합니다. 예를들어
name한쪽만 바꾸거나 score한쪽만 사용자가 입력한 경우 입력한 항목만 바꾸도록 구현합니다.

다음, 만약 Student중에서 name이 일치하는 데이터가 존재한다면, 새로입력받은 항목으로 업데이트하고,
그렇지 않다면 새로운 학생 데이터를 만들어서 저장합니다.

포스트 맨으로 테스트를 해보면, 

 

홍길동의 점수를 90점으로 수정하여 send했을 때

 

결과값이 올바르게 출력되는 것을 볼 수 있습니다.

 

마지막으로 DELETE 동작입니다.
get과 post처럼 delete메서드 또한 존재하는데요, delete메서드를 통해서 구현하도록 하겠습니다.

server.js에 다음과 같은 코드를 추가합니다.

app.delete('/:id', (req, res) => {
    Student.findOneAndRemove({
        _id: req.params.id
    }).then(() => res.json({
        success: true
    })).catch(err => {
        res.status(404).json({
            success: false
        });
    });
});

/:id 는 localhost/삭제할 데이터의 아이디 와 같이 아이디값을 주소에 넘김으로써 실행됩니다.
주소에 있는 항목을 인자로 넘겨받고 싶을때는 req.body가 아닌 req.params를 사용합니다.

포스트맨을 통해 삭제가 잘 되는지 확인합니다. POST 동작을 실행하면 출력되는 Json 데이터중에서
_id 항목을 가져와서 DELETE연산을 실행합니다.

 

 

위의 _id 를 localhost/ 뒤에 입력합니다. 또한, delete로 메서드도 변경해줍니다.

 

send를 눌러 아래와 같이 표시되었다면 성공입니다.

 

mLab에서도 하나밖에 없던 데이터를 지워서 students가 갖고 있는 데이터 개수가 0인것을 확인 할 수 있습니다.

 

반응형

댓글