icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【node.js】Expressのルーティングを使って、アクセスしたページごとに表示されるファイルを切り替える

更新: 2025/04/13 2860文字

今回はnode.jsと、node.js用フレームワークExpressのルーティング機能を使って、『アクセスしたページごとに表示されるファイルを切り替える』というのを作ってみます。管理人は自分のプロダクトではlaravelで行うのが決まっているため、laravelルーティングもやりましたが、node.js&

Express概要や今回の下準備(インストールやファイル準備)

Expressってなに?

ExpressはNode.jsで利用できるWebアプリケーションフレームワークのことです。今回使う『ルーティング』のようにいろんな機能がまとめられていて、それらを呼び出して、シンプルなコードで記載することができます。管理人はExpressなしでルーティング書こうとしましたが、結構めんどくさかったです(笑)

また、フレームワークによくある『テンプレートエンジン』『ミドルウェア』『デバッグ』などの機能も。詳しくは公式ページも読んでみてください。

下準備~Expressインストールや表示htmlファイルの準備

まず、今回の機能を作る前に、node.js/npmがインストールされていることが前提となります。当サイトの前回の記事でインストールなどを行ってみたので、まだの方は参考になさってください。

node.js/npmがインストールされている状態で、Expressインストールコマンドを実行しました。以下の通り。

npm install express

こんな感じでインストールされていきます。『npm list』のコマンド(インストールされたパッケージの一覧を表示するコマンド)を実行して確認したところ、expressも入ったようですね。

そのあとは、ルーティング切り替え時に表示するhtmlファイルをいくつか用意します。
『index.htmlがトップページ』『sub1.htmlが〇〇/sub1』『sub12.htmlが〇〇/sub2』のように、アクセスしたurlごとにファイルを設定しました。app.jsはnodeを起動したときに実行されます。

Expressルーティングで、アクセスしたページごとに表示ファイル切り替え機能を作る

app.jsはこんな感じで書いていきました。requireはphpでも使うんで、意味は分かりやすいです。requireで読んでいるのは『Express』と、ファイル操作のモジュール『fs』ですね。const app = express()を書いておくことにより、『app.get(~なんか処理~)』のように機能にアクセスできます。ポートは8080です(http://localhost:8080がトップになります)

let index = fs.readFileSync("./index.html");
let sub1 = fs.readFileSync("./sub1.html");
let sub2 = fs.readFileSync("./sub2.html");

上記はfsモジュールの機能で、それぞれindex.html・sub1.html・sub2.htmlを読んで変数に設定。『Sync』って付いているのは同期処理のようですね(非同期がasync)。

app.get('/', (req, res) => {
 res.writeHead(200, {"Content-Type": "text/html"});
 res.write(index);
 res.end(); });

そのあとは、ページごとの処理を書いていきます。例として『http://localhost:8080にアクセス、メソッドはgetメソッド(get,post,put,deleteみたいなやつ)』のケースを上げます。
『res.writeHeadでヘッダー情報』『res.writeでコンテンツの書き出し』『res.endで処理終了』という流れです。

app.listenの部分は、『listenメソッドで待ち受け状態に』という内容。console.log内にメッセージを指定したので、実行時にコマンドプロンプトに『app.js実行中っす on port〇〇』が表示されます

Expressルーティング機能・実行結果

それでは、cdコマンドでファイルを置いたディレクトリに移動し、app.jsを実行します(ファイル名は設定した内容に合わせて変えてください)。以下のコマンドを実行し、ブラウザでそれぞれのurlにアクセスしてみます。

node app.js

まずは『http://localhost:8080』にアクセス。トップページ用に指定したindex.htmlが表示されました(ポートを8080で設定したので、urlに8080がついています)。

『http://localhost:8080/sub1』にアクセス。sub1.htmlが表示されました。

『http://localhost:8080/sub2』にアクセス。sub2.htmlが表示されました。これができれば、nodeで普通のサイトも作れそうですね。

あとがき・まとめ

  • node.jsにはセットで使えるフレームワークExpressがあり、各種機能をシンプルなコードで利用できる
  • ファイルを扱いたいときはfsモジュールを使う
  • app(変数の名前設定による).get(〇〇,◇◇)で、ページごとに処理を振り分けられる

まとめると、こんなところでしょうか。azure・マネージドクラウド・専用サーバーとかにnode入れて、普通のサイト作って表示させるのは、こういうったやりかたでできそうです。


【カテゴリ】- javascript/jQuery、その他
【タグ】-

関連記事