글 작성을 위한 페이지가 필요하므로 layout.pug의 block 바로 위에 아래 코드를 작성합니다.
if(session.nickname !== undefined)
#write
a(href='/post/write') 글쓰기
그러면 로그인이 된 경우에 오른쪽 navbar에 아래와 같이 글쓰기 버튼이 생깁니다.
이제 routes 폴더 아래에 post.js 파일을 만들고 app.js에서 route를 추가합니다.
post.js
const express = require('express');
const router = express.Router();
router.get('/write', (req, res) => {
if (CheckAuth(req, res)) {
res.render('write', {
session: req.session,
title: 'Write',
categories: req.categories
});
}
});
CheckAuth = (req, res) => {
if (req.session.nickname) {
return true;
} else {
res.render('error', {
message: '비정상적인 접근입니다.'
});
return false;
}
};
module.exports = router;
이 때 post/write는 누구나 접속 가능한 url이므로 CheckAuth를 통해 실제 로그인 되어있는지 다시 한 번 체크해줍니다.
게시글 작성을 편하게 하기 위해서 웹 기반의 WYSIWYG에디터인 quill을 사용할 것입니다.
views 폴더 아래에 write.pug 파일을 만들어줍니다.
extends layout
block main
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='write')
label(for='category') 메뉴
select(name="category")
each category in categories
option(value=category.name)= category.name
br
label(for='title') 제목
input.input-text(type='text' name='title')
br
input(type='hidden' name='body')
#editor-container
br
input(type='submit' value='글쓰기')
script(src = '/scripts/quill-write.js')
quill을 사용하기 위해서는 별도의 설치 없이 브라우저에서 스크립트를 불러오면 됩니다.
그리고 public/scripts폴더를 만들고 quill-write.js 파일을 생성해 줍니다.
quill-write.js
let quill = new Quill('#editor-container', {
placeholder: '본문',
theme: 'snow' // or 'bubble'
});
이유는 알 수 없지만 웹 페이지를 실행하면 아래처럼 툴바 높이가 이상하게 높게 나옵니다.
style.css 파일에 아래 코드를 추가해줍니다.
.ql-toolbar.ql-snow {
height: 3em;
}
그럼 아래와 같이 정상적으로 UI가 나타납니다.