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"
  }
}