express - Router ; 파일분리

YoonJu Lee·2021년 7월 18일
0

Node.js

목록 보기
6/10

소프트웨어가 커짐에 따라서 복잡도를 정리 정돈 하지 않으면 소프트웨어가 커짐에 한계가 있다.
이번 시간에는 라우터가 커지면서
( 현업에는 라우터가 100개~1000개가 될 수 있다.)
이를 파일별로 정리 정돈 하는 technique 을 기술 한다.

expressjs.com

1. 새 폴더에 path가 /topic/으로 시작하는 페이지들 이주

express (웹 어플리케이션) > routes directory 생성 > topic file 생성 > /topic/ 경로인 router들을 topic file에 이주시킴.

2. 코드 작성

< main.js >
1) 제일 위에 추가.

var topicRouter = require('./routes/topic')

2) 라우트 한 코드들 바로 밑에.


app.use('/topic', topicRouter);

: '/topic'으로 주소들에게 topicRouter라는 미들웨어를 적용하겠따!! 라는 뜻.

< topic.js >

var express = require('express') // express를 로딩시킴
var router = express.Router() // express.Router() 메소드를 실행 -> router라는 객체를 return

3. main.js / topic.js 코드 비교.

<main.js>

: // express라는 모듈 자체를 호출
// Application 객체를 리턴
< topic.js >

: express가 갖고있는 Router메소드를 호출
, Router 를 리턴


: 예제 코들를 보면서..

< topic.js >
모든 app.으로 시작하는 코드 => router.으로 변경한다.

왜일까?? 답을 찾아봐라!

홈페이지를 실행 해 보면.. 에러발생
콘솔 > TypeError: Router.use() requires a middleware function but got a Object
Sol) topic.js 맨 끝에, 코드추가
: topic.js 파일이 모듈로써 동작하기 위해서는, 파일 바깥쪽으로 누구를 export 시킬지를 써 줘야 한다!! => Rouer가 export됨

module.exports = router;

현재 상태 )

목록에서 CSS333을 클릭한 화면 )

Sol)
< main.js >

app.use('/topic', topicRouter);

이 코드처럼, router를 이렇게('/topic/')지정하면
라우터 내부에서는 /topic을 path에다가 담을 필요가 없다.

==> < topic.js > 에서 라우터 의 path에서 '/topic'을 모두 지워줌
* ( 주의 라우터의 경로 (ex. router.get('/topic/create/)~~ ) 에서만 지우는 것이지, 밑의 form-action같은 곳에서는 지우면 안됨!! )
**_


콘솔> ReferenceError: template is not defined
at C:\Users\82107\documents\github\express\routes\topic.js:13:14

Sol) < topic.js > 상단에 코드 추가

var template = require('./lib/template.js');

콘솔> Error: Cannot find module './lib/template.js'

Sol) 현재 페이지 ; < topic.js >인데, './lib/template.js' : topic.js의 상위인 routes directory의 하위의 lib directory를 가리키는 경로를 뜻함.
=> 경로를 부모경로부터 시작으로 바꿈.

var template = require('../lib/template.js');

콘솔> Error : path is not defined
Sol ) var path = require('path');


*** 이런식으로 Err를 보면서, 정의되지 않은 것들은 main.js에서 복붙하기..


Comment :

Router 라는 express의 기능을 이용해서,
Application에서 서로 연결되어 있는 Route들을
별도의 파일로 빼서 코드를 단순화 시킴.

profile
Coder가 아닌 Engineer를 향해서.

0개의 댓글