예를 들어 아래와 같은 한가지 배열을 만들 예정이야
const express = require("express");
const app = express();
app.listen(1234);
const fruits = [
{ id: 1, name: "apple" },
{ id: 2, name: "orange" },
{ id: 3, name: "banana" },
{ id: 4, name: "grape" },
];
자 이런 다음 각각의 id값을 가지고 해당 과일을 불러오면 되는데,
app.get("/fruits/:id", (req, res) => {
let id = req.params.id;
let fruit = fruits[id];
fruits.forEach(function (fruit) {
if (fruit.id == id) {
findFruit = fruit;
}
});
res.json(findFruit);
});
이렇게 하면 값이 나와.
지금 이렇게해서 postman에서 돌려보면
localhost:1234/fruits/1 이렇게 돌리면,
id값을 빼왔음에도 불구하고 id가 1인 apple을 불러오지 못하고, 2번째 요소인 orange를 불러오네.
그 이유는 json도 배열이기 때문에
0부터 시작하는 인덱스 번호를 가지고 있기 때문이지.
그래서 id값을 하나 빼줘야 해.
그래서 위에 let fruit = fruits[id - 1];
이렇게 바꿔주면, id가 1인 apple이 잘 불러와지지.
하지만 나는 그걸 하고 싶지 않아서
여기선 forEach를 사용해서 했어.
그럼 잘 나오지만,
이번에는 forEach말고 다른 걸로 써볼려고 해.
어떤 함수냐면 find()함수야.
저 3줄짜리 forEach문을 find함수를 사용하면 단 한줄로도 표현이 가능해!
바로 이렇게 말이죠!
app.get("/fruits/:id", (req, res) => {
let id = req.params.id;
var findFruit = fruits.find(f => f.id == id);
});
res.json(findFruit);
});
find 함수를 이용해서 fruits.find(f => f.id == id); 이렇게 한 줄로 표현해도 괜찮고,
아직 이 표현이 익숙하지 않다면,
app.get("/fruits/:id", (req, res) => {
let id = req.params.id;
var findFruit = fruits.find(function (fruit) {
return fruit.id == id;
});
이렇게 표현해줄 수도 있지.

if (findFruit) {
res.json(findFruit);
} else {
/예외를 터트린다 = http status code 성공 x 실패로 바꿔준다.
res.status(404).json({
message: "전달 주신 id에 해당하는 과일이 없습니다.",
});
} //이거 할떄 send가 안됨. json으로 보내야함.
});
예외처리할때는 긍정으로 if문을 만들어주는 것이 좋고, 있다면 뭐뭐하고 없으면 예외처리를 해주는게 좋아.
res.json구조 많이 봤는데, 그 앞에 그냥 status(404)라고 상태코드 하나 붙어준거뿐이야.