Express で静的ページを返す方法

Express のインストール

Express を使うとスタティックコンテンツを返す、簡易ウェブサーバーを簡単に作成することができます。

ディレクトリを作成後、node.js プロジェクトを初期化します。

mkdir foo
cd foo
npm init -y

次のコマンドで Express をインストールします。

npm install express

Express で静的コンテンツを保存するディレクトリ名を指定

さっそくコード例として、index.js を次のようにします。

const express = require('express')
const app = express()
app.use(express.static('statics'))
app.listen(3000, () => console.log('Listening on port 3000...'))

次のように statics フォルダを作成し、その中に test1.htmltest2.html を作成します。

中身はスタティックコンテンツならなんでもいいですが、とりあえずここでは次のようにしました。

test1.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test1</title>
    <style>body { font-family: sans-serif; }</style>
  </head>
  <body>
    <h1>Page 1</h1>
    <p>Go to <a href="test2.html">Page 2</a>.</p>
  </body>
</html>

test2.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Test2</title>
    <style>body { font-family: sans-serif; }</style>
  </head>
  <body>
    <h1>Page 2</h1>
    <p>Back to <a href="test1.html">Page 1</a>.</p>
  </body>
</html>

node.js でスクリプトを開始します。

node index.js
Listening on port 3000...

ブラウザから localhost のポート 3000 番に対して、test1.html を要求すると次のようにページが表示されるはずです。

Page 2 へのリンクをクリックすると確かに次のページにいきます。

以上で、Express を用いてスタティックコンテンツを返すコード例と実行例を示しました。

express.static に誤ったパスを渡している場合、次のエラーが発生することがあります。 (このままのエラーメッセージではなく、表示されるエラーメッセージの一部です)

var opts = Object.create(options || null)
TypeError: Object prototype may only be an Object or null

Express で実行されているウェブサーバーで POST された JSON 形式、あるいはフォームデータを受け取る方法については、 「body-parser」も参考にしてください。

Express で静的コンテンツを返す時に仮想ディレクトリ名を指定する方法

上記では statics という名前の実ディレクトリ名で、 そのまま静的コンテンツをパブリッシュしています。

もし、この物理パスに対して、仮想ディレクトリ名として public を割り当てるなら、上記の index.js の 3 行目を次のように指定します。

app.use('/public', express.static('statics'))

これで、上記の test1.htmlhttp://localhost:3000/public/test1.html としてアクセスできます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Node.js 入門