express를 간단하게 사용한다면야, app.ts에 다 넣는 방식을 사용 할 수 있겠지만,
코드가 상당히 길어집니다. 이제 모듈을 분리해주는 작업이 필요하겠죠.
app.get을 통해 여러 라우터를 만들었습니다. 이제 그것을 포함하는 한단계위의 라우터(app.get기준에서는 middleware의 역할이겠죠.) 이를 만들어봅니다.
cats라는 큰 폴더에, 타입과 임시데이터가 있는 model파일
그리고 route파일하나를 만듭니다.
//cats.route.ts
import { Cat, CatType } from "./cats.model";
import { Router } from "express";
const router = Router();
// 고양이 전체 데이터 조회
router.get("/cats", (req, res) => {
try {
const cats = Cat;
// throw new Error("db connect error"); => 직접 에러를 던져볼 수 있습니다.
res.status(200).send({
success: true,
data: {
cats,
},
});
} catch (error) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
// CREATE 새로운 고양이 추가 api
router.post("/cats", (req, res) => {
try {
const data = req.body;
// console.log(req.body);
console.log(data);
Cat.push(data);
res.status(200).send({
success: true,
data: {},
});
} catch (error) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
// 특정 고양이 데이터 조회 [동적 라우팅]
router.get("/cats/:id", (req, res) => {
try {
const params = req.params;
const cat = Cat.find((cat) => {
return cat.id === params.id;
});
// throw new Error("db connect error"); => 직접 에러를 던져볼 수 있습니다.
res.status(200).send({
success: true,
data: {
cat,
},
});
} catch (error) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
export default router;
모듈화를 했을 뿐 기능상의 차이는 전혀 없습니다. 이렇게 라우터와 미들웨어의 개념을 잘 적용하여 모듈화를 처리할 수 있는 것을 잘 활용해야합니다.