Static에 대해 알아보자.
Static
Static 모듈은 Express에서 제공하는 기본 미들웨어로 html, css, js, 이미지 등 정적 파일에 대한 기본 경로를 제공해줍니다.
사용 방법
app.use('요청 경로', express.static('실제 경로'))예시
1 2
app.use("/", express.static(path.join(__dirname, "public"))); // 'public'은 정적파일이 존재하는 root경로의 폴더명으로, 자신의 개발환경에 따라 다르게 설정할 수 있습니다.
요청 경로에
/
로 왔을 때, Express는public
폴더 안에서 해당 경로를 찾습니다.즉, https://localhost:3000/html/index.html와 같은 요청을 받으면, Static 미들웨어는 위에서 설정한 ./public/html/index.html 파일을 반환해줍니다.
실제 서버의 폴더 경로에는 public이 있지만 요청 주소에는 생략됩니다.
서버의 폴더 경로와 요청 경로가 다르므로 외부인이 서버의 구조를 쉽게 파악할 수 없게해 서버 보안의 장점이 있습니다.
express.static 미들웨어는 정적 파일을 제공할 때 next 대신 res.sendFile로 응답을 보냅니다.
따라서, 정적 파일을 제공하는 경우 그 뒤의 미들웨어들은 실행되지 않습니다.
path 모듈
path 모듈은 Node.js에서 기본으로 제공되며 파일, 디렉토리 등의 경로를 편하게 설정하도록 도와줍니다.
- __filename : 현재 실행 중인 파일 경로
- __dirname : 현재 실행 중인 폴더 경로
path 모듈 사용 방법
path는 node.js의 내장 모듈로 설치없이 사용할 수 있습니다.
1
2
import path from "path";
const __dirname = path.resolve(); // commonJS 모듈에서는 생략해도 됩니다.
Express에서 ES module을 사용하게 되었을 경우
(“type”: “module” in package.json)
ReferenceError: __dirname is not defined 에러가 발생하게 됩니다.
주요 메서드
path.normalize('경로')
//나 \ 등으로 경로 구분자를 잘못 사용해도, 정상 경로로 변환해줍니다.1 2 3
console.log(path.normalize("/src///public/////html/index.js")); // 결과 : /src/public/html/index.js
path.join('경로', '경로', ...)
여러개의 경로를 합쳐줍니다.
상위경로(..), 현재경로(.)도 알아서 처리해주며 중간에 /를 만나면 앞의 경로에 이어서 ‘상대경로’로 처리합니다.1 2
console.log(path.join(\_\_dirname, '/a/b', '..', './b', 'c', '/d')); // C:/workspace/project/Project_01/a/b/c/d
path.resolve('경로', '경로', ...)
여러개의 경로를 합쳐줍니다.
상위경로(..), 현재경로(.)도 알아서 처리해주며 join()과 다르게 중간에 /를 만나면 앞에 경로 다 무시하고, ‘맨 처음부터’ 다시 시작합니다.1 2
console.log(path.resolve(\_\_dirname, '/a/b', '..', './b', 'c', '/d')); // /d