nodeJS express(웹서버), SSI(server side include)
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 이 인클루드 된 것을 확인 할 수 있다.