📝

15. blog_API

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