Web Tech/node.js

nodeJS express(웹서버), SSI(server side include)

jaiyah 2015. 5. 11. 18:33


nodeJs 웹 서버 & SSI(server side include) 설정


전의 포스팅 중에 nodeJs 로 웹 서버를 구현하는 내용을 다루어 보았는데 이번에는 SSI(server side include) 까지 함께 다루어 보고자 한다.

nodeJs 가 설치되어 있다는 가정하에 아래 구문을 실행합니다.


$ npm install -g express


전역 옵션플래그로 express 모듈을 설치한다.

그리고 아래와 같이 해당 프로젝트 폴더에 다시 express 모듈을 다시 설치한다.


아직까지 왜 전역에 설치하고 나서 해당 프로젝트 디렉터리에 다시 express 를 install 해야하는지는 모르겠다. ㅠ


$ npm install express




다음으로 ssi 모듈을 설치한다.


$ npm install ssi


해당 프로젝트 폴더의 node_modules 에 express 와 ssi 가 설치된 것을 확인 할 수가 있다.


다음으로 루트 디렉터리에 server.js 를 생성한 후 아래 코드를 넣어 준다. 

express, ssi 모듈을 실행하기 위한 js 를 생성하는 것이기 때문에 js 네이밍은 맘대로 정하면 된다. ( 난... server.js ~~ )



var express = require("express"),
ssi = require("ssi"),
path = require("path"),
fs = require("fs"),
app = express(),

parser = new ssi(__dirname, "", "");

// Handle server side includes for html files
app.use(function(req,res,next) {
var filename = __dirname+(req.path == "/" ? "/*.html" : req.path); // 모든 html을 인클루드 하기 위한 syntax

if(fs.existsSync(filename)) {
res.send(parser.parse(filename, fs.readFileSync(filename, {encoding: "utf8"})).contents);
} else {
next();
}
});


app.listen(process.env.PORT || 9001); // localhost port 설정


* header.html, footer.html 이 있다는 가정하에 다음의 HTML 에 include 할 파일을 ssi 문법에 맞게 인클루드해 준다.


인클루드 문법은 다음과 같다. (HTML)


<!--#include virtual="" -->
<!--#include file="" -->
<!--#set var="" value="" -->

<!--#if expr="" -->
<!--#elif expr="" -->
<!--#else -->
<!--#endif -->


*** 위 문법에 주의할 점은 <!-- 과 # 사이에 공백이 없어야 한다는 점이다.



HTML


<!--#include virtual="header.html" -->

<p>My Content</p>

<!--#include virtual="footer.html" -->



server.js 를 실행한다.


$ node server.js


server.js 를 실행하여 인클루드된 HTML을 실행하면 header.html 과 footer.html 이 인클루드 된 것을 확인 할 수 있다.



Jaehee's e-room