로그인 로직
app.post("/login", (req, res) => {
console.log(req.body); //userId, pwd
//userId가 db에 저장된 회원인지
const { userId, password } = req.body;
var loginUser = {};
db.forEach((val) => {
if (val.userId == userId) {
loginUser = val;
}
});
//userId 값을 못찾으면
if (loginUser == {}) {
console.log("아이디같은거찾음");
//pwd 맞는지 비교
if (val.password === password) console.log("비번 같다");
else console.log("비번 다르다");
} else {
console.log("입력하신 아이디는 없는 아이디 입니다.");
}
});
forEach 반복문을 돌면서, userId가 있는지 확인하고, 있으면 loginUser 변수 안에 넣어준다.
json 빈 객체 확인하는 방법
{}
- 객체.keys()
- for in - 객체 전체 탐색
- lodash 라이브러리 : isEmpty
const obj1 = {}
const obj2 = {message : "안빔"}
const num = 1
const str1 = "one"
const str2 = "" //문자열도 결국 객체!
console.log(Object.keys(obj1).length === 0) //length === 0
console.log(Object.keys(obj2).length === 0) //length === 1
console.log(Object.keys(num).length === 0) //true?? 오류
console.log(Object.keys(str1).length === 0)
console.log(Object.keys(str2).length === 0)
//console
true
false
true
false
true
Object.keys(obj).length : 객체를 배열 형태로!
Object.prototype.constructor
`1`, `true` 및 `"test"`와 같은 원시(primitive) 값에 대해서만 읽기 전용으로 사용된다
isExist 함수 분리
//로그인 아이디 찾기
function isExist(obj) {
if(Object.keys(obj).length) return true;
else return false;
}
//로그인
app.post("/login", (req, res) => {
//userId가 db에 저장된 회원인지
const { userId, password } = req.body;
var loginUser = {};
db.forEach((val, key, map) => {
if (val.userId == userId) {
loginUser = val;
}
});
//userId 값을 못찾으면
if (isExist(loginUser)) {
console.log("아이디같은거찾음");
//pwd 맞는지 비교
if (loginUser.password === password) console.log("비번 같다");
else console.log("비번 다르다");
} else {
console.log("입력하신 아이디는 없는 아이디 입니다.");
}
});
채널 API 설계
- 채널 생성 : POST `/channels`
- req : body (channelTitle)
- res 201 : `${channelTitle}님 채널을 응원합니다.` >
다른 페이지?
- 채널 개별 수정 : PUT `/channels/:id`
- req : URL (id), body (channelTitle)
- res 200 : `채널명이 성공적으로 수정되었습니다. 기존 :${} > 수정 : ${}`
- 채널 개별 삭제 : DELETE `/channels/:id`
- req : URL (id)
- res 200 : `삭제되었습니다` > 메인페이지
- 채널 전체 "조회" : GET `/channels`
- req : X
- res 200 : 채널 전체 데이터 list, json array
- 채널 개별 "조회" : GET `/channels/:id`
- req : URL(id)
- res 200 : 채널 개별 데이터
채널 API 코드
같은 url끼리 묶어주기!
//express 모듈 세팅
const express = require("express");
const app = express();
app.listen(7777);
app.use(express.json());
let db = new Map();
var id = 1;
app
.route("/channels")
//채널 전체 조회
.get((req, res) => {
res.send("전체 조회");
})
//채널 개별 생성
.post((req, res) => {
res.send("개별 생성");
});
app
.route("/channels/:id")
//채널 개별 조회
.get((req, res) => {
res.send("개별 조회");
})
//채널 개별 수정
.put((req, res) => {
res.send("개별 수정");
})
//채널 개별 삭제
.delete((req, res) => {
res.send("개별 삭제");
});
channel 개별 생성 POST
//채널 개별 생성
.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(404).json({
message: "요청 값을 제대로 보내주세요.",
});
}
});
channel 개별 조회 GET
//채널 개별 조회
.get((req, res) => {
let { id } = req.params;
id = parseInt(id);
let channel = db.get(id)
if (channel) {
res.status(200).json(db.get(id));
} else {
res.status(404).json({
message: "채널 정보를 찾을 수 없습니다.",
});
}
})
channel 개별 삭제 DELETE
//채널 개별 삭제
.delete((req, res) => {
let { id } = req.params;
id = parseInt(id);
let channel = db.get(id);
if (channel) {
db.delete(id);
res.status(200).json({
message: `${channel.channelTitle}이 정상적으로 삭제되었습니다.`,
});
} else {
res.status(404).json({
message: "채널 정보를 찾을 수 없습니다.",
});
}
});
channel 개별 수정 PUT
//채널 개별 수정
.put((req, res) => {
let { id } = req.params;
id = parseInt(id);
let channel = db.get(id);
let oldTitle = channel.channelTitle;
if (channel) {
let newTitle = req.body.channelTitle;
channel.channelTitle = newTitle;
db.set(id, channel);
res.status(200).json({
message: `채널명이 정상적으로 수정되었습니다. 기존 ${oldTitle} -> ${newTitle}`,
});
} else {
res.status(404).json({
message: "채널 정보를 찾을 수 없습니다.",
});
}
})
☑️ 배운 점
JSON 빈객체 확인하는 법. 다양한 형태의 예외처리
채널 API 설계할때, 이전의 로직과 비슷하지만 조금 달랐다.
강의를 멈추고 먼저 코드를 작성하는 방법으로 학습하니, 어떤 부분이 어렵게 느껴지는지 알 수 있었다.
큰 로직들은 떠올릴 수 있었지만, 구체적인 코드 예를들어 데이터를 어디에서 가져오는지, status 의 구체적인 이해도 등, 회원 API를 바로 직전에 학습하지 않았다면 더욱더 어려웠을 것 같다.
그래도 반복학습을 하니 서버의 동작방식을 이해할 수 있어서 좋았다.
앞으로 있을 코드 고도화가 기대된다!