정적 파일들을 제공하는 라우터 입니다.
fs.readFile로 파일을 직접 읽어서
전송할 필요가 없어 편리합니다.
아니요.
기본적으로 제공되므로
express 객체로 접근할 수 있습니다.
ex) express.static()
app.use('요청 경로', express.static('실제 경로'));
app.use('/', express.static(path.join(__dirname, 'public')));
인수 : 정적 파일들이 담겨 있는 폴더 경로
위 예시는 public 폴더를 지정했습니다.
예를 들어
public/stylesheets/style.css 는
http://localhost:3000/stylesheets/style.css로
접근할 수 있습니다.
서버에 public 폴더를 만들고
css나 js, 이미지 파일들을 public 폴더에 넣으면
브라우저에서 접근할 수 있게 됩니다.
예시에서
app.use(express.static( __dirname + ‘/public’ ));
이런식으로 경로를 적지 않고
path.join 을 사용한 이유는
운영체제( 윈도우나 맥 )에 따라서 ‘경로 구분자’가 / 또는 \ 로
차이가 있을 수 있기 때문 입니다.
( __dirname : 현재 폴더 경로 )
네. 외부인이 서버의 구조를 파악하기 힘듭니다.
위 사용예시에서
실제 서버의 폴더 경로에는 public이 들어 있지만,
요청 주소에는 public이 들어 있지 않다는 점을 주목해주세요.
서버의 폴더 경로와
요청 경로가 다르기 때문에
외부인이 서버의 구조를 쉽게 파악할 수 없습니다.
그래서 보안에 도움이 됩니다.
요청 경로에 파일이 없으면
알아서 내부적으로 next를 호출해
다음 미들웨어가 실행 됩니다.
반대로 파일을 발견하면
응답으로 파일을 보내고
next를 호출하지 않아서
다음 미들웨어는 실행되지 않습니다.