Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

express에서 하위 경로로 라우팅하기

일반적으로 어플리케이션에서루트의 절대경로를 사용하기를 좋아하는데 express앞에 nginx같은 웹서버를 두다보니 일일이 서브도메인을 만드는것도 귀찮고 하위디렉토리에 express 앱을 연결할 일이 있었다. 예를 들면 http://example.com/app 을 express로 리버스 프록시하는 경우인데 이렇게 되면 당연히 앱의 URL 경로가 /가 아닌 /app이 되므로 라우팅을 모두 변경해 주어야 한다.

당연한 이야기이지만 /example이라는 하위경로로 연결한다고 하면

app.get('/example', routes.index);

라우팅을 할 때 위처럼 경로 앞에 /example같은 접두사를 모두 붙혀주어야 한다.

link(rel='stylesheet', href='/example/stylesheets/style.css')

그리고 정적파일에도 절대경로를 사용한 곳이라면 당연히 모두 접두사를 붙혀주어야 한다. 정적파일의 경로를 바꾸어 주었으므로 express에서 정적파일에 대한 접두사를 지정해 주어야 한다.

app.use(express.static(path.join(__dirname, 'public')));

express에서는 위와 같이 정적파일 폴더를 지정하는데 이렇게 사용한 경우 public 폴더의 하위 내용이 자동으로 / 경로 아래로 라우팅된다. 여기서는 /example 경로를 사용하므로 정적파일에 대한 라우팅도 바꾸어야 한다. connectapp.use()는 첫번째 파라미터로 경로를 받기 때문에 추가로 접두사 경로를 지정해 주면 된다.

app.use('/example', express.static(path.join(__dirname, 'public')));

이렇게 설정하면 정상적으로 정적파일로 하위경로로 접근할 수 있다.

일반적인 css가 아닌 LessStylus같은 CSS  프리컴파일러를 사용한다면

app.use(require('less-middleware')({ src: __dirname + '/public' }));

위과 같이 미들웨어를 설정해서 페이지 접근시 less나 stylus등이 css로 자동 컴파일되도록 해서 사용할 텐데 정적파일에 대한 미들웨어의 경로가 바뀌었기 때문에 정적파일에 접두사 경로를 추가하면 더이상 자동으로 컴파일을 수행하지 않는다.

app.use('/example', require('less-middleware')({ src: __dirname + '/public' }));

적정파일 미들웨어와 마찬가지로 CSS 프리 컴파일러에도 접두사 경로를 추가해 주어야 한다.
2013/05/12 23:24 2013/05/12 23:24