일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ES6
- 리액트
- NextJs
- javscript
- ECMAScript
- HTML
- API
- clonecoding
- pug
- graphQL
- CLONE
- CSS
- express
- form
- Session
- MongoDB
- Component
- heroku
- frontend
- 자바스크립트
- GRID
- backend
- Flutter
- Mongoose
- node.js
- nodejs
- JavaScript
- react
- DART
- TypeScript
- Today
- Total
Enjoy Programming
Express (Node.js) MVC pattern 본문
Model : data (database)
모델은 클라이언트에 노출되지 않는다, 연산처리 및 DB가 주 된 목적, 컨트롤러에서 요청이 오면 해당 연산처리 후 정보를 return
View : how does the data look (template)
클라이언트에 나타나는 부분, HTML / CSS / Javascript 등으로 꾸미고, 움직이고, 표현하는게 가능
사용자에게 반드시 보여지는 부분, 가공된 정보를 사용자가 보기 쉽게 나타내야 하는 곳.
controller : fucntion that looks for the date (function)
사용자의 요청을 받고 응답을 조종
view request -> model operation -> 가공된 데이터 -> view response
model과 view를 연결함. application logic을 신경쓰지 않고, viewsms 랜더링에 대한 책임을 갖고, model은 data처리에만 책임을 갖도록
중개인 역할을 함.
model을 생성하고 observing함, view에게 model을 전달하고 , view의 액션을 처리함
Router: 라우터는 컨트롤러가 실행해야 하는 path와 http method를 정의한 것
음... 뭐랄까 url에 유저가 접속하면 컨트롤러가 템플릿을 뿌려주고 유저가 뭔가 request하면 컨트롤러가
데이터베이스에서 가져와서 템플릿에 뿌리고 이템플릿을 다시 컨트롤러가 유저에게 보여준다? 는 정도로 이해하겠다.
암튼 그러한 과정이 있으니 크게 M V C로 나누어 관리하자~~~라는 정도
자 그럼 라우터 폴더를 만들어주고 거기에 라우터들을 넣어준다.
유튜브 클론과정이니 userRouter와 videoRouter를 만들고 넣어준다.
그리고 각 라우터들을 default로 export해주자 (모듈로 추출)
그럼 default로 추출했으니 app.js에서 { userRouter }를 그냥 import userRouter from "./routers/userRouter"로 바꾼다.
비디오도 마찬가지 - default로 export하면 그 파일 전체를 export한다.
그리고 globalRouter를 만들어주자.
root가 될 home이라던지 search등등
이제 url을 만들자
root폴더에 routes.js를 만들고 url을 정의해주자.
각 변수에 url을 담아주고 routes객체를 만들어주자
여기서 ":id"가 있는데 express는 url에 :으로 시작하는 값이 있으면 변수로 인식한다.
routes객체는 각 property마다 url이 담긴 변수를 매칭하자.
이제 routes를 default로 export해주면 어디서든 사용할 수 있다~ url을 한 곳에서 관리하니까
차후 수정이나 추가시 쉽게 찾을 수 있다. 그리고 어디서든 사용 가능하다~ 이방식 좋다
파이썬도 이게 가능했나?.... blueprint이용해서 어쩌고 하긴 했는데 이런 기능은 아니었던거 같다....
이제 app.js로 가서 임포트 해주고
요롷게 해주자~~그럼 home url에 접근하면 globalRouter가 실행된다.
globalRouter로가서~ 역시 routes를 임포트 해주고
컨트롤러를 설정해주면~ 각 url마다 설정된 텍스트를 뿌려준다
** 참고 **
ERROR // 잘 따라오다가 왜 globalRouter.js에서 routes를 임포트하고 라우팅 설정을 해줬는데 왜 안된다... //
에러코드를 잘 따라가다 보니.
이런.. 이미 4000번 포트를 쓰고 있다고 한다..
이미 다른 프로세스에서 사용중이라서 접속을 못하는 거다.. 흔한 케이스라고 한다..
nodejs가 이전에 비정상적으로 종료된 경우 나타나는 흔한 증상.
찾아서 killing해주자
iterm으로 터미널을 열어서
lsof -i TCP:4000을 처주자.
이렇게 뜬다. PID만 보자,,, 4088프로세스가 사용중이란다
kill -9 4088을 해주고 다시 실행하니 잘된다. (-9는 강제 종료 시그널)
'JavaScript > Node.JS' 카테고리의 다른 글
ERROR 라우터... 연결에 대한 고찰 (0) | 2021.04.09 |
---|---|
Express (Node.js) MVC pattern 2 (0) | 2021.04.09 |
Express (Node.js) Core : Routing (0) | 2021.04.08 |
Express (Node.js) - middleware : Morgan, helmet, bodyparser, cookieparser (0) | 2021.04.07 |
Express (Node.js) - middleware (0) | 2021.04.07 |