글 작성 기능 구현 - 3. 수정, 삭제


삭제는 정말 간단하게 post.js에 아래와 같이 delete라우트를 추가해 DB에서 포스트를 삭제해주면 끝입니다.

router.post('/delete', (req, res) => {
    if (CheckAuth(req, res)) {
        req.database.query(`DELETE FROM post WHERE id = ${req.body.id};`, (err) => {
            if (err) throw err;

            res.status(200).redirect('/');
        });
    }
});

수정은 조금 더 복잡한데 우선 views폴더에 update를 추가해줍니다.

extends layout

block post
  script(src="https://cdn.quilljs.com/1.3.6/quill.js")
  link(href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet")
  .Body
    div
      form(method='post' action='update/process')
        input.delete-text(type='hidden' name='id' value=id)
        label(for='category') 메뉴
        select(name="category")
          each category in categories
            if(category.name === _category)
              option(value=category.name selected)= category.name
            else
              option(value=category.name)= category.name
        br
        label(for='title') 제목
        input.input-text(type='text' name='title' value=title)
        br

        input(type='hidden' name='body')
        #editor-container(value= body)
        br
        input(type='submit' value='수정')

  script(src = '/scripts/quill-write.js')

write.pug와 거의 비슷하지만 카테고리와 내용을 수정하려는 글로 초기화시켜줍니다.

그리고 post.js에 아래 두개의 라우트를 추가해줍니다.

router.post('/update', (req, res) => {
    if (CheckAuth(req, res)) {
        req.database.query(`SELECT * FROM POST WHERE id = ${req.body.id};`, (err, post) => {
            if (err) throw err;

            res.render('update', {
                session: req.session,

                title: post[0].title,

                _category: post[0].category,

                body: post[0].body,

                id: req.body.id,

                categories: req.categories
            });
        });
    }
});

router.post('/update/process', (req, res) => {
    if (CheckAuth(req, res)) {
        let category = req.database.escape(req.body.category);

        let title = req.database.escape(req.body.title);

        let body = req.database.escape(req.body.body);

        console.log(body);

        req.database.query(
            'UPDATE post ' +
                `SET category = ${category}, title = ${title}, writtentime = '${moment().format()}',` +
                ` body = ${body} WHERE id = ${req.body.id};`,
            (err, result) => {
                if (err) throw err;

                console.log(result);

                res.status(200).redirect(`/post/${req.body.id}`);
            }
        );
    }
});

update에서는 수정하는 페이지를 보여주고 update/process에서는 수정된 내용을 DB에 반영해줍니다. 전체적으로 write와 비슷한 코드입니다.

이렇게 가장 기본적인 글 생성, 읽기, 수정, 삭제 기능을 전부 구현했습니다.

다음에는 지금까지 개발한 웹을 호스팅하는 방법에 대해 포스팅하겠습니다.