[Express.js]

김영진·2021년 11월 14일
0

목적

nestjs 공부를 위한 express 아키텍처 선행학습

내용

파일구조

src
├── app.ts
└── cats
├── cats.model.ts
├── cats.route.ts
└── cats.service.ts

app.js

싱글톤, 미들웨어, 라우터, 404error 핸들링 처리

import * as express from "express";
import catsRouter from "./cats/cats.route";

class Server {
    public app: express.Application;

    constructor() {
        const app: express.Application = express();
        this.app = app;
    }

    private setRoute() {
        this.app.use(catsRouter);
    }

    private setMiddleware() {
        //* logging middleware
        this.app.use((req, res, next) => {
            console.log(req.rawHeaders[1]);
            console.log("this is logging middleware")
            next();
        });

        // json middleware
        this.app.use(express.json());

        this.setRoute();

        // 404 middleware
        this.app.use((req, res, next) => {
            console.log('this is error middleware');
            res.send({error: "404 not found"});
        });
    }

    public listen(){
        this.app.listen(8000, () => {
            console.log('server is on ...');
        });
    }

}

function init(){
    const server = new Server();
    server.listen();
}

init();

cats.route.ts

라우터 설정

import {Router} from "express";
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;

cats.services.ts

로직

import {Request, Response} from "express";
import {Cat, CatType} from "./cats.model";

// READ 고양이 전체 데이터 다 조회
export const readAllCat = (req: Request, res: Response) => {
    try {
        const cats = Cat;
        // throw new Error("db connect error");
        res.status(200).send({
            success: true,
            data: {
                cats,
            },
        });
    } catch ({message}) {
        res.status(400).send({
            success: false,
            error: message,
        })
    }
};

// READ 특정 고양이 데이터 조회
export const readCat = (req: Request, res: Response) => {
    try {
        const params = req.params;
        console.log(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,
                // hey: true,
            },
        });
    } catch ({message}) {
        res.status(400).send({
            success: false,
            error: message,
        });
    }
};

// CREATE 새로운 고양이 추가
export const createCat = (req: Request, res: Response) => {
    try {
        const data = req.body;
        console.log(data);
        Cat.push(data);
        res.status(200).send({
            success: true,
            data: {data},
        });
    } catch ({message}) {
        res.status(400).send({
            success: false,
            error: message,
        })
    }
};

// UPDATE 고양이 데이터  업데이트 -> PUT
export const updateCat = (req: Request, res: Response) => {
    try {
        const params = req.params;
        const body = req.body;
        let result;
        Cat.forEach((cat) => {
            if (cat.id === params.id) {
                cat = body;
                result = cat;
            }
        });
        // throw new Error("db connect error");
        res.status(200).send({
            success: true,
            data: {
                result,
            },
        });
    } catch ({message}) {
        res.status(400).send({
            success: false,
            error: message,
        });
    }
};

// UPDATE 고양이 데이터 부분적으로 업데이트 -> PATCH
export const updatePartialCat = (req: Request, res: Response) => {
    try {
        const params = req.params;
        const body = req.body;
        let result;
        Cat.forEach((cat) => {
            if (cat.id === params.id) {
                cat = {...cat, ...body};
                result = cat;
            }
        });
        // throw new Error("db connect error");
        res.status(200).send({
            success: true,
            data: {
                result,
            },
        });
    } catch ({message}) {
        res.status(400).send({
            success: false,
            error: message,
        });
    }
};

// UPDATE 고양이 데이터 삭제 -> DELETE
export const deleteCat = (req: Request, res: Response) => {
    try {
        const params = req.params;
        const newCat = Cat.filter((cat) => cat.id !== params.id);
        // throw new Error("db connect error");
        res.status(200).send({
            success: true,
            data: newCat
        });
    } catch ({message}) {
        res.status(400).send({
            success: false,
            error: message,
        });
    }
};

결론

app.ts
V
middleware, router
V
services
V
error handling

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp

0개의 댓글