오도원입니다.

건강과 행복을 위하여

프로젝트/니랑내랑

REST API 3. Update와 Delete

오도원공육사 2020. 2. 20. 20:17
반응형

https://github.com/ohdowon064/REST_API/tree/dc48c1ac421b5b8bbf7dbf653b49c8175441311a

 

ohdowon064/REST_API

for study rest api. Contribute to ohdowon064/REST_API development by creating an account on GitHub.

github.com

전체코드는 다음을 참고하라

 

...생략...

server.get('/api/user', (req, res) => {
	res.json(users);
    console.log(users);
});

server.get('/api/user/:id', (req, res) => {
	const user = users.find(u => {
    	return u.id === req.params.id;
    });
    if(users) {
		res.json(user);
    } else {
    	res.status(404).json({errorMessage : "user was not found"});
    }
});

server.post('/api/user', (req, res) => {
    users.push(req.body);
    res.json(users);
    console.log("user is pushed", users);
})

server.put('/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 {
    	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 {
    	let foundUser = users.splice(foundIndex, 1);
        resjson(foundUser[0]);
    }
});

...생략...

 

톺아보기

1. sever.get

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"});
    }
})

라우트 패스를 /api/user/:id 다음과 같이 지정하면 request 객체의 params property 객체의 id property에 user/ 뒤에 입력한 값이 저장된다. 따라서 /api/user/ohdowon 패스로 들어오면 req.params.id에 ohdowon이 저장되는 것이다. 

 

find()는 users(json 객체 array)에서 req.params.id 값과 같은 데이터를 찾아서 해당 json 객체를 반환한다. 그러면 user에 저장되는데 만약 user가 존재하면 해당 객체를 전송하고, 없으면 404 에러를 전송한다.

 

저기서 u는 users(json 객체의 array)에서 json객체 하나를 지칭하는 임시 변수명이다. 

 

2. server.put

server.put('/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 {
        users[foundIndex] = {...users[foundIndex], ...req.body};
        res.json(users[foundIndex]);
    }
});

update는 put을 쓴다.

 

findIndex 함수는 일치하는 데이터의 인덱스를 찾으면 해당 인덱스를 리턴하고 없으면 -1을 리턴한다. -1을 리턴한 경우에는 404 에러를 전송하도록 한다.

 

만일 동일한 아이디를 찾을 경우에는 해당 데이터를 유저가 전송한 req.body로 업데이트한다. '...'은 여기서 해당 오브젝트의 property값을 복사하게 된다.

users[foundIndex] = {...users[foundIndex], ...req.body};

따라서 이것은 users[foundIndex]의 property값을 req.body의 property값으로 업데이트 하는 것이다.

 

3. server.delete

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 {
        let foundUser = users.splice(foundIndex, 1);
        res.json(foundUser[0]);
    }
});

위와 동일하게 findIndex() 메소드로 찾는다.

 

찾았을 경우에 삭제를 하는데, splic(foundIndex, 1);은 foundIndex로 부터 1칸을 지운다는 의미이다. 따라서 해당 데이터 하나를 지우게 된다. 지운 데이터 배열 형태로 반환되면 foundUser에 저장된다. 나머지는 users에 그대로 남아있게 된다.

 

 

Update

현재 상태
put을 통해 데이터 수정한다.
수정되었다.

 

Delete

삭제되었다.

반응형