Data 구조(Data Schema, ERDCloud와 같은 툴로 시각화 합니다.)
게시물 Data schema
* id (고유, 게시물번호로 사용)
* title
* content
* section
* pubDate
* modDate
* viewCount
로그인 Data schema
* id(고유, 1230981239081234)
* email(고유, 로그인 id로 사용)
* pw
* username
* nickname
* sex (선택)
* phone (선택)
* iplocation (사용자에게 보이지지 않는 정보)
API 명세
GET
* / - 메인화면 + 최근 게시물 3개
* /about - 내 소개
* /blog - 블로그 글 리스트 전부
* /write - 로그인시에만 활성화(생성, 수정)
* write를 하고 POST로 값을 넘겨 글 작성이 DB에 성공적으로 저장된 경우 -> /blog로 이동
* 저장이 실패한 경우 -> 내가 쓰고 있던 글을 그대로 보여줘야 합니다. (삭제X)
* /blog/:id - 블로그 상세 글
* /blog/?section=:section - 해당 섹션만 모아 볼 수 있도록
POST (생성)
* /write
1. 만약 내가 작성한 게시물로 이동해야 한다면 : title, content, section (날짜는 서버에서 처리)
2. 만약 게시글 목록으로 이동해야 한다면 : success
PUT (수정)
* /blog/:id - title, content, section (날짜는 서버에서 처리), 로그인한 사용자만 해당 게시글 수정
DELETE (삭제)
* /blog/:id - 삭제 완료 -> blog(게시물 목록)로 리다이렉트
Source code
011_blog_API\router
// 파일이름 : 011_blog_API\\app1.js
// npm init --yes
// npm i nunjucks express cors helmet morgan
// npm i nodemon --save-dev
// -> nodemon app1 으로 실행 가능
const nunjucks = require('nunjucks');
const express = require('express');
const cors = require('cors');
const morgan = require('morgan'); // 디버깅
const helmet = require('helmet'); // 보안
const blogRouter = require('./router/blog.js');
const app = express();
app.set('view engine', 'html');
nunjucks.configure('template', {
autoescape: true,
express: app,
watch: true
});
app.use(express.json());
app.use(helmet());
app.use(cors());
app.use(morgan('tiny'));
app.use('/blog', blogRouter);
app.get('/', (req, res) => {
res.send('hello world')
// res.render('test1.html', {
// name : "hojun!",
// age : 10
// });
});
app.use((req, res, next) => {
res.sendStatus(404);
})
app.use((err, req, res, next) => {
console.log('애러났음!')
console.log(err);
res.sendStatus(500);
})
app.listen(8080);
// 파일이름 : 011_blog_API\\package.json
{
"name": "011_blog_API",
"version": "1.0.0",
"description": "",
"main": "app1.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"express": "^4.17.1",
"express-async-error": "0.0.2",
"helmet": "^4.6.0",
"morgan": "^1.10.0",
"nunjucks": "^3.2.3"
},
"devDependencies": {
"nodemon": "^2.0.14"
}
}