티스토리 뷰
파일구조 파악하기
- 리스폰스로 html파일을 보내고 싶은데, 해당 html 파일이 다른 폴더에 속해있다면 어떻게 해야할까? 간단하게 sendFile에 ../views/shop.html 라고 , 보내고자 하는 파일의 위치를 넣으면 될 것 같지만, 클라이언트는 시스템 파일 구조에 직접적으로 접근 할 수 없으므로 불가능하다. 따라서 파일 구조를 파악하고, 해당 파일 구조를 sendFile의 인자로 넣어야한다.
여기서 우리가 현재 response를 보내는 곳은 routes 폴더 하위의 admin.js파일과 shop.js파일이고, response로 보내고싶은 html 파일은 views폴더에 있다. routes폴더와 views폴더의 상위 폴더 (MODULE_) 는 같다.
이 때 아래와 같이 sendFile()에 인자를 넣어주면 된다.
res.sendFile(path.join(__dirname, '..', 'views', 'shop.html'));
- __dirname ==> 해당 파일 (현재 파일)이 속한 폴더로 가기
- '..' ==> 해당 폴더의 상위 폴더로 가기
- 'views' ==> 상위 폴더에서 views란 폴더 찾기
- 'shop.html' ==> views폴더에서 shop.html 이란 파일 찾기
하지만 이를 조금 더 간결하게 할 수 있다.
- 제일 상위 폴더에 새 폴더를 만든다 ( util)
- 해당 폴더에 path.js 라는 자바스크립트 파일을 만든다.
- 그리고 path.js 아래에 아래와 같은 코드를 넣어준다.
const path = require('path');
module.exports = path.dirname(process.mainModule.filename);
해당 코드는 우리가 위에서 적은 __dirname과 '..' 을 대신해주는 것을 exports 해준다.
따라서 sendFile() 리스폰스코드는 아래와 같이 수정되고, 꼭 콜백함수 path.join의 인자로 넣어주어야 한다.
const rootDir = require('../util/path'); //상위폴더 util에서 path를 exports해오기
res.sendFile(path.join(rootDir, 'views', 'shop.html'));
'web : back-end > node js' 카테고리의 다른 글
[node js] Express: Pug 템플릿 엔진 (0) | 2020.06.18 |
---|---|
[node js] Express : Request로 받은 데이터 전달하기 (0) | 2020.06.17 |
[node js] Express: router 객체를 통해 라우팅을 모듈화하기 (0) | 2020.06.16 |
[node js] Express: 미들웨어를 통해 다른 path(route) 처리하기 (0) | 2020.06.15 |
[node js] 노드 js의 이벤트 루프 구조 (0) | 2020.06.14 |
댓글