당연한 이야기이지만 /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 경로를 사용하므로 정적파일에 대한 라우팅도 바꾸어야 한다. connect의 app.use()는 첫번째 파라미터로 경로를 받기 때문에 추가로 접두사 경로를 지정해 주면 된다.
app.use('/example', express.static(path.join(__dirname, 'public')));
이렇게 설정하면 정상적으로 정적파일로 하위경로로 접근할 수 있다.
일반적인 css가 아닌 Less나 Stylus같은 CSS 프리컴파일러를 사용한다면
app.use(require('less-middleware')({ src: __dirname + '/public' }));
위과 같이 미들웨어를 설정해서 페이지 접근시 less나 stylus등이 css로 자동 컴파일되도록 해서 사용할 텐데 정적파일에 대한 미들웨어의 경로가 바뀌었기 때문에 정적파일에 접두사 경로를 추가하면 더이상 자동으로 컴파일을 수행하지 않는다.
app.use('/example', require('less-middleware')({ src: __dirname + '/public' }));
적정파일 미들웨어와 마찬가지로 CSS 프리 컴파일러에도 접두사 경로를 추가해 주어야 한다.
제가 생각하는 개념이 맞는지 모르겠지만 이게 가능한지 한번 여쭤봅니다. PL 프리젠테이션 부분은 nginx 에서 서비스하고 물론 라우팅도 예전 웹 개발 방식과 동일하게 가져가고 단지 서버사이드 node.js 에서는 BL 비지니스 로직만 담당하게 아키텍쳐를 가져가고 싶은데 이게 하나의 서버에서 가능하게 하는게 가능할까요? ^^ 웹의 개념이 잘 없어서 궁금합니다.
뭐 이런겁니당 www.xxx.com 에서는 static 웹 파일만 서비스하고 그 static 웹 파일에서 데이터베이스의 자료를 가져와 처리하는 비지니스 로직은 webservice.xxx.com 으로 서비를 하는 개념이 가능할지를 여쭤보는거에요 ^^
웹 개발을 어느정도 아시는지 몰라서 답변을 드리기가 어렵지만 정적 웹파일에서 비느지스 로직을 처리한다는 부분이 잘 이해가 되지 않습니다.
제가 이해한 범위에서는 정적 HTML 파일은 nginx에서 내려주면 여기서 자바스크립트가 webservice.xxx.com 같은 곳으로 ajax등을 찔러서 데이터를 가져오는 방식은 가능합니다. 보통 이를 SPA(single page applicaion)이라고 부르지만 일반적으로는 정적 파일에서 HTML 등은 서버쪽에서 처리하고 css, js, image등의 정적 파일만 웹서버가 처리하게 됩니다.
관리자만 볼 수 있는 댓글입니다.
제 책으로 보고 계셨군요. 현재 node.js 버전이 책을 출간할 때와 많이 달라져서 공부하실때 힘드신게 많으실텐데 예제는 업데이트해놓았으니 참고하시면서 모르는거 있으면 물어보세요.