import * as express from "express";
import { Cat, CatType } from "./app.model";
import catRouter from "./cats/cats.route";
const app: express.Express = express();
const router = express.Router();
// logging middleware
app.use((req, res, next) => {
console.log(req.rawHeaders[1]);
console.log("this is middleware");
next(); // 다음 라우터 실행
});
// json middleware
app.use(express.json());
// router
app.use(catRouter);
// middleware for 404 error
app.use((req, res, next) => {
console.log("this is middleware");
res.send({ error: "404 not found Error!" });
});
app.listen(8000, () => {
console.log("server is on");
});
import * as express from "express";
import catRouter from "./cats/cats.route";
const app: express.Express = express();
// 싱글톤 패턴
class Server {
public app: express.Application;
constructor() {
const app: express.Application = express();
this.app = app;
}
private setRoute() {
// router
app.use(catRouter);
}
private setMiddleware() {
// ---- middleware ----
// logging middleware
app.use((req, res, next) => {
console.log(req.rawHeaders[1]);
console.log("this is middleware");
next(); // 다음 라우터 실행
});
// json middleware
app.use(express.json());
// route middleware
this.setRoute();
// middleware for 404 error
app.use((req, res, next) => {
console.log("this is middleware");
res.send({ error: "404 not found Error!" });
});
}
public listen() {
this.setMiddleware();
this.app.listen(8000, () => {
console.log("server is on");
});
}
}
function init() {
const server = new Server(); // 서버 인스턴스 생성
server.listen(); // 서버의 listen 실행
}
init(); // init 함수 실행
import * as express from "express";
import { Cat, CatType } from "./cats.model";
import { readAllcat } from "./cats.service";
const route = express.Router();
// ----router----
// READ 고양이 전체 데이터 가져옴
route.get("/cats", (req: express.Request, res: express.Response) => {
try {
// 더미데이터지만 db에서 데이터를 가져온다고 생각하고 try catch 구문 작성
const cats = Cat;
// throw new Error("db connect error"); // catch로 넘어감
res.status(200).send({ success: true, data: cats });
} catch (error: any) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
// READ 특정 고양이 데이터 가져옴
route.get("/cats/:id", (req: express.Request, res: express.Response) => {
try {
// 더미데이터지만 db에서 데이터를 가져온다고 생각하고 try catch 구문 작성
const { id } = req.params;
const cat = Cat.find((cat) => {
return cat.id === id;
});
// throw new Error("db connect error"); // catch로 넘어감
res.status(200).send({ success: true, data: { cat } });
} catch (error: any) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
// CREATE 새로운 고양이 추가
route.post("/cats", (req: express.Request, res: express.Response) => {
try {
const data = req.body; // undefined, express에서 json을 읽을 수 있도록 미들웨어를 추가해줘야한다.
// app.use(express.json());
const cats = Cat;
cats.push(data); // create
console.log("enter data?", cats);
res.status(201).send({ success: true, data: { cats } });
} catch (error: any) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
// Update 고양이 정보 전체 수정
route.put("/cats/:id", (req: express.Request, res: express.Response) => {
try {
const body = req.body; // undefined, express에서 json을 읽을 수 있도록 미들웨어를 추가해줘야한다.
const { id } = req.params;
let result;
Cat.forEach((cat) => {
if (cat.id === id) {
cat = body;
result = cat;
}
});
res.status(201).send({ success: true, data: { cat: result } });
} catch (error: any) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
// Update 특정 고양이 정보 수정
route.patch("/cats/:id", (req: express.Request, res: express.Response) => {
try {
const body = req.body; // undefined, express에서 json을 읽을 수 있도록 미들웨어를 추가해줘야한다.
const { id } = req.params;
let result;
Cat.forEach((cat) => {
if (cat.id === id) {
cat = { ...cat, ...body };
result = cat;
}
});
res.status(201).send({ success: true, data: { cat: result } });
} catch (error: any) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
// Delete 고양이 정보 삭제
route.delete("/cats/:id", (req: express.Request, res: express.Response) => {
try {
const { id } = req.params;
const result = Cat.filter((cat) => cat.id !== id);
res.status(201).send({ success: true, data: { cat: result } });
} catch (error: any) {
res.status(400).send({
success: false,
error: error.message,
});
}
});
export default route; // 위에서 get,post 등으로 등록한 router를 내보낸다.
route에 있는 비즈니스 로직을 분리하기 위해 service 파일을 추가해준다.
import { Router } from "express";
import { NextFunction } from "express-serve-static-core";
import {
createCat,
deleteCat,
readAllcat,
readCat,
updateCat,
updatePartialCat,
} from "./cats.service";
const router = Router();
router.get("/cats", readAllcat);
router.get("/cats/:id", readCat);
router.post("/cats", createCat);
router.put("/cats/:id", updateCat);
router.patch("/cats/:id", updatePartialCat);
router.delete("/cats/:id", deleteCat);
export default router;