Object.keys()
객체의 key들만 모아서 배열로 만들어주는 메서드이다. 아래와 같이 사용하면 된다.
Object.keys(객체명)
const obj = { id: "devcourse", password: "1234", name: "ncherryu" };
console.log(Object.keys(obj2)); // output: [ 'id', 'password', 'name' ]
자바스크립트는 다른 언어에서와 마찬가지로 문자열을 객체로 취급한다.
const str1 = "one";
const str2 = "";
console.log(Object.keys(str1).length === 0); // output: false
console.log(Object.keys(str2).length === 0); // output: true
Object.keys()를 이용하여 객체가 비어있는가에 대해 참/거짓을 반환해 주는 함수를 만들어보자.
입력으로 받은 매개변수가 객체인지 먼저 확인하는 과정을 거친다.
function isEmpty(obj) {
// 파라미터가 객체인지 먼저 확인
if (obj.constructor !== Object) {
return false;
}
return Object.keys(obj).length ? true : false;
}
회원 API
로그인
- DB에 해당 아이디가 존재하는지 확인한다.
- 비밀번호가 일치하는지 확인한다.
isExisted 함수는 입력받은 객체 안에 원소가 존재하는지 확인해주는 역할을 한다.
findUser 함수는 입력받은 사용자 아이디와 일치하는 객체를 DB에서 찾아서 반환해 준다. 일치하는 객체를 찾았다면 해당 객체를 반환하고, 찾지 못했다면 undefined를 반환한다.
정상 동작하는지 확인하기 위한 코드이므로 아직 상태 코드는 지정하지 않았다.
function isExisted(obj) {
// 파라미터가 객체인지 먼저 확인
if (obj.constructor !== Object) {
return false;
}
return Object.keys(obj).length ? true : false;
}
function findUser(userId) {
let loginUser = {};
db.forEach((user) => {
if (user.userId === userId) {
loginUser = user;
}
})
return loginUser;
}
app.post('/login', (req, res) => {
const { userId, password } = req.body;
let loginUser = findUser(userId);
let msg = '';
if (isExisted(loginUser)) {
if (loginUser.password === password) {
msg = '성공적으로 로그인했습니다.'
} else {
msg = '잘못된 비밀번호입니다.'
}
} else {
msg = '입력하신 아이디는 없는 아이디입니다.'
}
res.json({
message: msg
});
})
채널 API
설계
기능 | 메서드 | 상태 코드 | 경로 | 요청 | 응답 |
채널 생성 | POST | 201 | /channels | body(channelTitle) | 환영 메시지 → 채널 관리 페이지 |
채널 개별 수정 | PUT | 200 | /channels/:id | url(id), body(channelTitle) | 수정 메시지 |
채널 개별 삭제 | DELETE | 200 | /channels/:id | url(id) | 삭제 메시지 → 메인 페이지 |
채널 전체 조회 | GET | 200 | /channels | 채널 전체 데이터 list, json array |
|
채널 개별 조회 | GET | 200 | /channels/:id | url(id) | 채널 개별 데이터 |
채널 생성
request의 body에 채널명이 적혀있는지 확인한 후 데이터베이스에 저장한다.
요청에 채널명이 존재하면 201 코드와 함께 환영 메시지를 전송한다.
요청에 채널명이 존재하지 않는 경우 400 상태 코드와 함께 요청 값이 잘못되었다는 메시지를 전송한다.
app.route('/channels')
.post((req, res) => {
if (req.body.channelTitle) {
db.set(id++, req.body);
res.status(201).json({
message: `${db.get(id - 1).channelTitle}채널을 응원합니다!`
});
} else {
res.status(400).json({
message: '요청 값을 제대로 보내주세요.'
})
}
})
채널 개별 수정
url로 받은 id가 DB에 존재하는지 확인하고, body에 채널명이 들어있는지 확인한다.
둘 다 존재할 경우 채널명을 업데이트하고, 이전 채널명과 수정된 채널명을 메시지로 발송해준다.
body에 채널명이 누락된 경우와 존재하지 않는 id에 대한 요청일 경우 상태 코드를 400으로 설정하고 해당 메시지를 발송한다.
app.route('/channels/:id')
.put((req, res) => {
let { id } = req.params;
id = parseInt(id);
const channel = db.get(id);
const newTitle = req.body.channelTitle;
if (channel && newTitle) {
const oldTitle = channel.channelTitle;
channel.channelTitle = newTitle;
db.set(id, channel);
res.status(200).json({
message: `채널명이 정상적으로 변경되었습니다. 기존 ${oldTitle} -> 수정 ${newTitle}`
});
} else if (!newTitle) {
res.status(400).json({
message: '요청 값을 제대로 보내주세요.'
})
} else {
res.status(404).json({
message: '채널 정보를 찾을 수 없습니다.'
})
}
})
채널 개별 삭제
url로 받은 id가 존재하면 DB에서 삭제 후 삭제되었다는 메시지를, 존재하지 않는 id에 대한 요청이면 상태 코드를 404로 설정하여 잘못된 id임을 알리는 메시지를 발송한다.
app.route('/channels/:id')
.delete((req, res) => {
let { id } = req.params;
id = parseInt(id);
const channel = db.get(id);
if (channel) {
db.delete(id);
res.status(200).json({
message: `${channel.channelTitle}이 정상적으로 삭제되었습니다.`
});
} else {
res.status(404).json({
message: '채널 정보를 찾을 수 없습니다.'
})
}
}) // 채널 개별 삭제
채널 전체 조회
DB에 저장되어 있는 객체들을 순회하며 하나의 배열에 담아주어 JSON Array를 만든다. JSON Array이므로 json 형태로 응답을 보내도 무방하다.
조회할 채널이 없을 경우 해당 메시지를 발송한다.
app.route('/channels')
.get((req, res) => {
if (db.size) {
let channels = [];
db.forEach((channel, key) => {
channels.push(channel);
})
res.json(channels);
} else {
res.json({
message: "조회할 채널이 없습니다."
})
}
})
채널 개별 조회
url로 받은 id가 DB에 존재하는지 확인한다.
존재할 경우 해당 id에 대한 객체를 응답으로 보낸다.
존재하지 않는 id일 경우 상태 코드를 404로 설정하여 해당 채널을 찾을 수 없다는 메시지를 보낸다.
app.route('/channels/:id')
.get((req, res) => {
let { id } = req.params;
id = parseInt(id);
const channel = db.get(id);
if (channel) {
res.status(200).json(channel);
} else {
res.status(404).json({
message: '채널 정보를 찾을 수 없습니다.'
})
}
})
'데브코스' 카테고리의 다른 글
[5주차 - DAY3] Express.js 응용 (1) | 2024.03.27 |
---|---|
[5주차 - DAY2] REST API 개발 실습(2) (1) | 2024.03.26 |
[4주차 - DAY5] Node.js 및 Express.js를 사용한 서버 개발 실습(3) (1) | 2024.03.22 |
[4주차 복습 발표] API 설계 실습 (0) | 2024.03.21 |
[4주차 - DAY4] Node.js 및 Express.js를 사용한 서버 개발 실습(2) (0) | 2024.03.21 |