일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 장고
- Android Studio
- 안드로이드 스튜디오
- 블로그 만들기
- 입문
- 자바스크립트
- 안드로이드
- 파이썬
- react
- 안드로이드스튜디오
- 리액트
- 블로그만들기
- 개발
- javascript
- 중국어입문
- PYTHON
- Node js
- es6
- Android
- nodejs
- 알고리즘
- mongodb
- androidstudio
- java
- Django
- mern Stack
- MernStack
- express
- 자바
- 중국어
- Today
- Total
City At Night
[MernStack] Blog 만들기 5. Routing-Poster기능 (추가 수정) 본문
3일만에 포스팅합니다 .. 매일 쓸려고 노력하지만 바뻐서 그러질 못한다는..ㅜ (변명처럼 들리지만 변명 맞음 )
* 우선 라우팅이란 ?
라우팅은 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정이다. 최적의 경로는 주어진 데이터를 가장 짧은 거리로 또는 가장 적은 시간 안에 전송할 수 있는 경로다 -위키백과-
데이터를 주고 받을때의 최적의 경로라는 뜻입니다.
그럼 Express에서의 라우팅은?
URI(또는 경로) 및 특정한 HTTP 요청 메소드(GET, POST 등)인 특정 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방법을 결정하는 것을 말합니다. -Express Document
사용자가 로그인을 하면 로그인 후의 화면이 나오고,
새로운 글을 쓰면 나의 피드에 새로운 글이 추가되는 모습을 보여지게 되는 것 입니다.
1. router를 다룰 폴더와 js생성
자 그러면 먼저 routes라는 폴더를 만들고 그 안에 api 라는 폴더를 또 만들어주고,
api 폴더 안에는 포스트와 관련된 post.js와 유저와 관련된 user.js를 생성합니다.
2. post.js작성
import express from 'express';
// Model
import Post from '../../models/post';
const router = express.Router();
//모든 포스트를 검색하는 라우터
// 주소 : api/post
router.get('/',async(req, res)=> {
const postFindResult = await Post.find();
console.log(postFindResult, "All Post Get");
res.json(postFindResult);
})
../ 은 현재 있는 위치에서 상위 한단계로 이동 한다는 뜻이다.
router라는 변수에 express에서 제공하는 Router()라는 함수를 사용한다.
그리고 우리는 포스트를 검색하기 위한 router.get 과 포스트를 작성하는 router.post 를 작성한다.
get 은 쉽게 생각하면 데이터를 가져오는 것.
post 데이터를 보내는 것.
(글은 서버에 저장되어 있으니 글을 찾을땐 서버에서 get해오고, 글을 새로 작성하면 서버에 저장해야하니 서버로 post 하는 것이다)
router.get('/') 을 설명하자면..주소를 설정하는것이다.
현재 위치는 api의 post.js이기때문에 현재 주소는 api/post이고 router.get('/')를 했기에
api/post/~ 이런식이다. (이건 나중에 직접 눈으로 보면 이해가 쉬울듯하다..난 아직 보질 못했으나 장고의 모델뷰 패턴을 했기에 어느정도 짐작이 감)
async(req,res) => ~~ await Post.find();
async는 비동기라는 말이다. 말 그대로 동시에 일어나지 않는다? 동시에 하지않는다? 는 뜻이다.
반의어로 동기라는 말이 있는데 동기는 내가 서버에 A를 요청하면 서버가 나한테 A를 줄때까지 다음 일은 안하고 기다리는 것이다.
비동기는 반대이다. 내가 A를 요청하고 그 다음 일을 진행한다.
async(req,res) 는 서버에 req(request)와 res(response)을 하는 비동기 작업이다.
어떤 작업이냐면 그 다음줄에 있는
Post.find() : Post를 찾는 작업이다.
하지만 앞에 await 라는 명령어가 있다 .
이 말은 Post.find()를 끝낼때까지 다음 문장을 실행하지 않고 기다리겠다라는 명령이다.
결국 동기랑 똑같은 의미다
이젠 밑에 추가로 글을 작성하는 라우터이다.
// 글을 작성
router.post('/', async(req,res, next) => {
try {
console.log(req, "글 작성 req");
//req.body.title, req.body.contents, req.body.fileUrl, req.body.creator
const {title, contents, fileUrl, creator} = req.body;
const newPost = await Post.create({
title, contents, fileUrl, creator
});
res.json(newPost);
} catch (e) {
console. log(e);
}
})
export default router
이젠 글을 작성하는 post다.
req.body에서 title, content, fileUrl, creator을 가져온다.
(import Post from '../../models/post'; 했던 이유)
여기도 비동기식과 await문으로 글을 작성하는 로직이다.
Model의 post.js를 보면 title, contenst, fileUrl, creator에는 required라는 필수적인 옵션이 있기때문에
newPost에 필수적인 속성들을 담아주고
response를 json 포맷으로 응답해준다.
전체코드
<routes/api/post.js>
import express from 'express';
// Model
import Post from '../../models/post';
const router = express.Router();
//모든 포스트를 검색하는 라우터
//api/post
router.get('/',async(req, res)=> {
const postFindResult = await Post.find();
console.log(postFindResult, "All Post Get");
res.json(postFindResult);
})
// 글을 작성
router.post('/', async(req,res, next) => {
try {
console.log(req, "글 작성 req");
//req.body.title, req.body.contents, req.body.fileUrl, req.body.creator
const {title, contents, fileUrl, creator} = req.body;
const newPost = await Post.create({
title, contents, fileUrl, creator
});
res.json(newPost);
} catch (e) {
console. log(e);
}
})
export default router
다음 app.js 로 들어가서
import postRoutes from './routes/api/post'; //위쪽 import 부분에 추가
app.use('/api/post', postRoutes) // 아래쪽 app.get("/")에 추가 해주었음
를 추가해 주고
npm run dev 를 해주어 실행 시켜주면 된다.
----추가-----
app.use(hpp()); 에 에러 뜨신 분들은 import를 안해서 에러가 뜨는겁니다.
전(4번째) 포스팅에 추가 import 한 내용을 적지 못했습니다.(추가 수정하였습니다)
import hpp from 'hpp';;
import helmet from 'helmet';
import cors from 'cors'
import morgan from 'morgan
추가 해주세요.
'MernStack' 카테고리의 다른 글
[MernStack] Blog 만들기 7. Routing-user기능 // 코드수정필요(미완성) (0) | 2021.03.22 |
---|---|
[MernStack] Blog 만들기 6. Poster Router 잘 되는지 테스트 (0) | 2021.03.14 |
[MernStack] Blog 만들기 4. MongoDB 설정 및 연결(내용 추가 수정됨) (0) | 2021.03.05 |
[MernStack] Blog 만들기 3. MongoDB 모델링 (0) | 2021.03.04 |
[MernStack] Blog 만들기 2. Express 서버 구동 (0) | 2021.03.02 |