핸들러 handler
http request 가 날아오면 자동으로 호출되는 메소드
노드 : 콜백함수로, app.HTTPMETHOD(path, 핸들러)
*스프링 : 컨트롤러
*부정문보다, 긍정문으로 조건문을 시작하면 조금더 클린코드와 가깝다!
`!youtuber` → `youtuber`
예외처리
map 객체가 아닌 arr 로 객체 생성했을때?
let findFruit = fruits.find((val) => val.id == id);
[id]로 찾으면, 객체는 배열 형식으로 생서되었기 때문에 id 값이 아닌, 인덱스 값으로 탐색하게 된다.
원하는 id값을 가진 객체를 호출하기 위해서 `.find()`메서드로 배열 안을 탐색해서 값을 찾아낸다.
findFruit? res.json(findFruit) : res.status(404).send("전달주신 id로 저장된 과일이 없습니다");
예외처리 삼항연산자.
`.status()` 로 http 상태 코드 전달할 수 있고, `.send()` 로 프론트에 메시지를 전달할 수 있다.
클라이언트(사용자, 화면)와 소통을 정확하게 하기 위함
== VS ===
== : 자료형 상관없이 값만 비교
=== : 자료형과 값 모두 비교
JS는 자료형에 크게 신경쓰지 않고 연산을 진행해주지만
개발 과정에서는 챙겨가는게 좋다.
null(" ") === undefined
관련한 정리글을 작성한 적이 있는데,
값도 없고, 저장공간도 할당되지 않은 상태를 undefined
값은 없고, 저장공간은 할당된 상태를 null이라고 한다
null == undefined `ture`
nul === undefined `false`
.status()
else의 없는 메시지에 `.status(404)` 추가
POST 예외처리
app.use(express.json()); //http 외 모듈인 '미들웨어':json 설정
app.post("/youtubers", (req, res) => {
if (req.body.channelTitle) {
//Map(db)에 저장(put)
db.set(++idx, req.body);
res.json({
message: `${req.body.channelTitle}님, 유튜버 등록이 완료되었습니다!`, //db.get(idx).channelTitle
});
} else res.status(400).json({ message: "channelTitle 작성 안함" });
});
` 400 Bad Request `
이 응답은 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다.
요청한 연산(처리)를 할때 필요한 데이터 req가 덜 왔을때
미니 플젝
진짜 유튜브 운영해볼까?
- 회원 가입
- 로그인
- 회원 가입
- 회원 정보 조회
- 회원 탈퇴
- 채널 - 회원은 계정 1개당 채널 100개를 가질 수 있다.
- 채널 생성
- 채널 수정
- 채널 삭제
회원 API 설계
- 로그인 : POST `/login`
- req : body (id, pwd)
- res : `${name}님 환영합니다.` → 메인페이지
- 회원 가입 : POST `/join`
- req : body (id, pwd, name)
- res : `${name}님 환영합니다.` → 로그인 페이지
- 회원 개별 정보 조회 : GET `/users/:id`
- req : URL (userid)
- res : userid, name
- 회원 개별 탈퇴 : DELETE `users/:id`
- req : URL (userid)
- res : `${name}님 다음에 또 뵙겠습니다.` → 메인 페이지
코드
회원가입
app.post("/join", (req, res) => {
// console.log(req.body)
if (req.body == {}) {
res.status(400).json({ message: "입력값을 다시 확인해주세요" });
} else{
db.set(id++, req.body);
res.status(201).json({ message: `${db.get(id - 1).name}님 환영합니다.` });
}
});
회원 개별 조회
app.get("/users/:id", (req, res) => {
let {id} = req.params;
id = parseInt(id);
const user = db.get(id)
if(user){
res.status(200).json({
userId : user.userId,
name : user.name
})
}else res.status(404).json({message : "회원 정보가 없습니다"});
});
.route
url 같고, http 메서드만 다를때, 합쳐서 사용할 수 있다.
app
.route("/users/:id")
.get((req, res) => {
let { id } = req.params;
id = parseInt(id);
const user = db.get(id);
if (user) {
res.status(200).json({
userId: user.userId,
name: user.name,
});
} else res.status(404).json({ message: "회원 정보가 없습니다" });
})
.delete((req, res) => {
let { id } = req.params;
id = parseInt(id);
const user = db.get(id);
if (user) {
db.delete(id);
res.status(200).json({
message: `${user.name}님 다음에 또 뵙겠습니다.`,
});
} else res.status(404).json({ message: "회원 정보가 없습니다" });
});
☑️ 배운 점
GET, POST 차이? body가 없느냐, 있느냐!
`.status()` 상태전달
`.route` 메서드
api 설계.. 꼭 혼자 해보기!