前回の最後にちょっとだけやりましたが、エックスサーバーでNode.jsを動かしてみることにします。⇒ 動作確認はこちら。あまりにしょぼすぎるサイトです。

ここではテンプレートエンジンのひとつであるEJSを使用しています。SSH接続をしたら適当なディレクトリを作成して、そこにnpmでEJSをインストールします。

index.ejsを用意する

npmでEJSをインストールしたらindex.ejsというファイルを作成してアップロードします。

index.ejs

style.cssを作成する

index.ejsを作成したらスタイルシートを使うので以下のファイルも作成します。

style.css

app.jsの作成

次にapp.jsを作成します。http、fs、ejsをrequireします。ポートは前回65000を使用したので今回は65001を使います。そのあと「url」オブジェクトによるURL処理をおこないます。

app.js

あとはそれぞれのページのリクエストの処理をするだけです。

ejs.render関数に渡すオブジェクトにはsite_title、page_title、main_content、sidebar_linkがあります。site_titleは同じものを使うのでgetFromClient関数のなかで設定しています。sidebar_linkも同じものを使うので、getSidebarLinkString関数のなかで文字列を取得して、これを設定しています。

トップページのレンダリング

トップページの場合はgetFromClientIndex関数のなかで、page_titleを’Node.jsのテストで作成したページ’に設定して、main_contentに設定する文字列を作成します。現在時刻や乱数を使って今日の運勢を占っています。時刻によってあいさつの言葉も変えています。

getSidebarLinkString関数はサイドバーに表示させる他のページへのリンクの文字列を生成・取得します。

スタイルシートのCSSファイルも同じディレクトリ内に置くので、getFromClientStyle関数でその内容を取得できるようにします。このような処理をしないと単にファイルをアップロードするだけでは認識されません。

他のページのレンダリング

/001.htmlにアクセスしたときのレンダリングの処理を示します。「ここは/001.htmlです」と表示させるだけです。

存在しないページにアクセスしたら「○○は存在しないページです」と表示させるとともにトップページに戻るためのリンクも表示させます。トップページと001.html、style.css以外は存在しないものとして処理をします。

https://lets-csharp.com/samples/2108/nodejs-test2/にアクセスしたときにサイトを表示させたいので/home/{サーバーID}/lets-csharp.com/public_html/samples/2108/nodejs-test2/に以下の.htaccessをアップロードします。

.htaccess

SSH接続してapp.jsをアップロードしたディレクトリに移動し、以下のコマンドを入力すればサイトが表示されます。