자바스크립트/Node JS

[Node JS] Router - Controller - Model 연결구조 (post)

KIMJAVAN 2024. 1. 16. 14:29
728x90
const router = require('express').Router() // express 쓸건데 express 안에 router()라는거를 나는 router라고 정의하겠다 (상수에 담음)
const controller = loadModule('gy', 'controller'); // 이거 쓰면 파일로 만든거 경로처리해줌. 이거 하려면 파일 이름 규칙대로 지어줘야함

router.post('/postcontent', controller.submitPost); // router를 만들건데 /postcontent로 만들거고 이거는 post기능을 할겁니다. 그리고 controller 에 submitPost를 쓸거임

module.exports = router //객체를 내보낼거다

router.js

 

const gyModel = loadModule('gy', 'model'); //이거 routes에서 비슷하게 쓴건데 같은 gy에 있는 model 불러올거다
const gyController = {};

//게시글 쓰기
gyController.submitPost = async (req, res) => { //gyController에 submitPost라는걸 만들건데 이걸 비동기로 처리할거임(값 없으면 오류발생)
    try {
        const {writer, title, content} = req.body;//비구조화할당. 필요한 값을 const writer = req.body.writer 로 쓸 수 있는걸 축약함

        if (!writer || !title || !content) { //만약에 필요사항 중 하나가 없으면 = 그러니까 셋 다 필요값이라는거임
            return res.status(400).json({ error: "글 작성에 필요한 값을 보내주세요." }); //오류코드 내보내고 오류메세지 출력
        }

        const post = await gyModel.submitPost(writer, title, content);//gyModel에 writer랑 title이랑 content값을 보낼건데 (위에서 선언한거) 이거 일단 기다려(없으면 오류나니까)

        if (!post) { //만약에  post가 없으면
            return res.status(503).json({ error: "post 등록 실패" }); //503에러를 만들거고 에러메세지 출력할거임
        }

        return res.status(200).json(post); //근데 위에거 다 ok되면 200 status내보내고 post를 json형식으로 내보냄 = post는 gyModel에서 담아온거임
    } catch (error) {
        console.error("Error adding post:", error); //위에거 실패하면 에러메세지 출력할거다 *콘솔
        return res.status(500).json({ error: "post 추가 실패" }); // 실패하면 500에러 반환하고 json형식으로 에러메세지 출력할거다
    }
};

module.exports = gyController;

controller.js

 

const gyModel = {};
const db = database();
const currentDateTime = new Date();
currentDateTime.setHours(currentDateTime.getHours());

// 쓰기
gyModel.submitPost = async (writer, title, content) => { // controller에서 받아온거 writer, title, content로 쓸거다
    let postId = null; // postId필요한데 이거 null로 할거다

    await db('gy_nodetest').insert({ //db에서 gy_nodetest에다가 데이터를 넣을건데
        writer: writer,
        title: title,
        content: content,
        status: 'Y',
        reg_datetime: currentDateTime,
        exp_datetime: currentDateTime //항목값 - 값 짝지어서 넣어줄거임
    })
    .then((newId) => { //그래서 ok하면 newId를 만들거고 
        postId = newId; // newId를 postId에 넣을거임
    })
    .catch((e) => { //에러 발생하면
        console.log(e); //콘솔에 에러찍고
        postId = null; //postId에 null반환할거임
    });

    return postId; //그래서 then이면 newId값, catch면 null값 된거를 다시 return함
};

module.exports = gyModel;

router.js