일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- RDF
- 스레드
- node.js
- 특징
- Groovy
- 이벤트 루프
- 지식 그래프
- 파헤쳐보자
- 노드
- benchmark
- Django
- ngrinder
- scrum
- C++
- 자바
- Knowledge Graph
- 스크럼
- Router
- Stream
- 스크럼 마스터
- socket.io
- java
- express
- nodejs
- node
- 예제
- 개발자
- 노드js
- 소켓
- Python
- Today
- Total
라봉이의 개발 블로그
node.js express 3. static file 정적 파일 옵션, path 모듈 본문
이전 포스트 : http://psyhm.tistory.com/5
저번 포스트에서는 router 객체와 render란 무엇인가에 대해 공부했었다.
이제 정적 파일(이미지 파일, javascript 파일, css 파일) 등을 express 서버가 어떻게 제공하는 지 알아보자.
정적 파일(Static files)
express가 static files(정적 파일들)을 제공하기 위해선
express.static 미들웨어를 사용해야 한다.
사용 방법은 다음과 같다.
express.static(root, [options]);
root는 정적 파일들이 위치한 경로를 string 타입으로 적으면 되고
options는 속성을 키값으로 한 객체를 넣으면 된다.
options는 다음 테이블에서 확인 가능하다.
속성 | 설명 | 타입 | 디폴트 |
dotfiles | "." 으로 시작하는 폴더나 파일을 어떻게 다룰 것인지에 대한 설정 | String | "ignore" |
etag | etag를 생성할 건지에 대한 설정(웹 캐시) | Boolean | true |
extenstions | 파일 확장자 대체 설정: 만약 file이 존재하지 않는다면 지정된 확장자를 가진 파일을 검색하고 발견된 첫번째 파일을 제공. ex) ['html', 'htm'] | Mixed | false |
fallthrough | (클라이언트 오류에 대한 것이라고 나오는데 어떤 때 쓰는 지 잘 모르겠다..) | Boolean | true |
immutable | Cache-Control 응답 헤더에서 immutable 사용유무를 결정합니다. | Boolean | false |
index | 지정된 디렉토리 index file을 전송합니다. | Mixed | "index.html" |
lastModified | Last-Modified 헤더를 OS에서 파일의 마지막 수정 날짜로 합니다. | Boolean | true |
maxAge | Cache-Control 헤더의 max-age 값을 설정합니다. | Number | 0 |
redirect | pathname이 디렉토리인 경우 후미 "/"로 리다이렉트 한다.(???) | Boolean | true |
setHeaders | 응답시 사용자 정의 헤더를 설정하는 기능. (밑에 부연설명) | function |
※ immutable: immutable은 브라우저 캐시가 fresh(max-age 내) 상태이면 페이지를 다시 로드할 때 Conditional GET을 발생시키는 대신 무조건 fresh Cache를 사용합니다. (정적파일 제공시 유용할 듯)
※ setHeaders: 헤더에 대한 변경은 동기적으로 발생해야 합니다. 이 함수는 fn(res, path, stat)이며 인수는 다음과 같습니다.
- res: the response object
- path: the file path that is being sent
- stat: the stat object of the file that is being sent
var options = {
dotfiles: 'ignore',
etag: false,
extensions: ['htm', 'html'],
index: false,
maxAge: '1d',
redirect: false,
setHeaders: function (res, path, stat) {
res.set('x-timestamp', Date.now())
}
}
app.use(express.static('public', options))
사실 위의 설정을 몰라도 무난하게 쓸 수 있으나 알고 있다가 나중에 세부 설정이 필요할 때 쉽고 빠르게 찾을 수 있으니 뭐가 있는지만 알아두자.
그리고 이 express.static(root, [options]);을 express에서 사용하고자 한다면 app.js 파일 23째줄을 보면 이미 사용된 것을 확인할 수 있다.
app.use(express.static(path.join(__dirname, 'public')));
app.use()함수는 나중으로 일단 미루자. 지금 설명하기에는 이정도 설명이면 충분할 것 같다.
app.use() 함수는 클라이언트가 서버에 요청을 할 때 중간에 거쳐가는 함수를 사용(use)하려고 할 때 사용한다.
라고 보면 된다.
간단히 express 서버에서 express.static(path.join(__dirname, 'public'))을 사용하겠다라고 보면될 것 같다.
일단 express.static()함수에 path.join() 함수가 사용된 것을 알 수 있고
옵션은 없으니 모두 디폴트값을 사용하는 것을 알수 있다.
Path 모듈
먼저 path 객체를 보자.
path에 대한 설명은 아래 url에서 document를 확인할 수 있다.
출처: https://nodejs.org/docs/latest/api/path.html
path는 말 그대로 경로에 관련된 모듈이다.
파일 경로를 쓰는데 문자열을 직접 자르고 합치는 것보다 path에서 제공하는 join 함수를 사용하는 것이 편하다.
그리고 __dirname은 node.js에서 제공하는 node 파일의 경로를 담고 있는 변수이다.
Node.js의 global object의 변수이므로 Node.js 어떤 모듈이든 접근 가능합니다.
global object에 관한 내용은 아래 url에서 document를 확인할 수 있다.
출처: https://nodejs.org/dist/latest-v8.x/docs/api/globals.html
path.join() 함수는 각 파라미터를 합쳐서 경로 문자열을 반환한다.
따라서 path.join(__dirname, 'public')는 '현재 app.js 파일의 경로 + /public'을 리턴한다.
public 디렉토리 안의 정적 파일들을 제공할 수 있도록 만들어야하기 때문이다.
public 디렉토리로 가보면 다음 폴더들을 볼 수 있다.
- images: 이미지 파일 저장하는 곳
- javascripts: 웹페이지에서 쓰이는 자바스크립트 파일들 저장하는 곳
- stylesheets: 웹페에지에서 쓰이는 css 파일들을 저장하는 곳
'Node.js > express' 카테고리의 다른 글
express-session- cookie 외에 다른 방법으로 인증하는 법 (0) | 2018.08.31 |
---|---|
node.js express 5. middleware란? 미들웨어 정의, 미들웨어 유형 (4) | 2018.03.26 |
node.js express 4. route paths 라우트 경로, route parameters 라우트 파라미터, response methods 응답 메서드 (0) | 2018.03.14 |
node.js express 2. router 객체, res.render 렌더링 (0) | 2018.03.04 |
node.js express 1. express란??, express generator, directory 구조 (3) | 2018.02.27 |