JavaScript

【express】テンプレートファイルに外からデータを渡す方法

どうも、つよぽんです!

今回は、expressでViewを作成するときにテンプレートファイルに対して、「外からデータを渡す方法」を解説します。

また、これまでと同じように、今回の解説記事もテンプレートエンジンに「EJS」を使います。

「テンプレートエンジン」「EJS」がわからない方は、以前書いた記事「【express】テンプレートファイルを使ってViewを作成する」でも解説しているので、そちらを参考にしていただけたらと思います。

普通のHTMLファイルと異なり、テンプレートファイルは外からデータを受け取って、受け取ったデータをテンプレートファイル内に埋め込むことができます

つまり、同じページにアクセスしたとしても、外から渡すデータを変更することで、異なる表示をしたWebページを作ることができます

このようなページを「動的なページ」と呼んだりもします。

今回の記事内容は、以下のリンク先で使っているスライドの一部を補足した記事になります。

実際に手を動かしながら覚えたい方は、以下のスライドも参考にすると良いでしょう。

あわせて読みたい
【express】テンプレートファイルに外からデータを渡す今回はexpressでViewを生成する際に利用するテンプレートファイルに外からデータを渡す方法を学習します。結論から言うと、res.render, includeの第2引数に渡したいデータをセットすれば良いだけです。外からデータを渡すことで動的なサイトを作れるようになります。...

今回の記事は次のような方に向けて書きました。

想定読者
  1. テンプレートファイルに外からデータを渡す方法を知りたい方
  2. 動的なWebページを作りたい方

この記事を読み終えた後のあなたは次のことがわかるようになっています。

この記事を読み終えた後のあなた
  • テンプレートファイルに外からデータを渡せるようになる
  • 動的なWebページを作れるようになる

それでは以下の内容で話を進めていきます。

今回の内容
  1. expressからテンプレートファイルにデータを渡す方法
  2. テンプレートファイルから別のテンプレートファイルにデータを渡す方法

expressからテンプレートファイルにデータを渡す方法

res.renderの第2引数に渡したいデータをセットする

expressからテンプレートファイルにデータを渡すには「res.render」メソッドの第2引数に、JavaScriptのオブジェクト形式で渡したいデータをセットします。

「res.render」メソッド自体は、以前書いた記事「【express】テンプレートファイルを使ってViewを作成する」でも説明したように、使用するテンプレートファイルを指定するときにも使いました。

テンプレートファイルに外からデータを渡すときの書き方

つまり、使用するテンプレートファイルの指定と、そのテンプレートファイルにデータを渡したいときは以下のような形式で記述することになります。

res.render(‘index’, {data: ‘外から渡された値です’});

上記のように記述することで、「index.ejs」内で、以下のようにデータを埋め込むことができます。

<p><%= data %></p>

上記のように記述すると、「<%= data %>」の部分に「外から渡された値です」という文字列がセットされるようになります。

今回は「data」というプロパティ名を使いましたが、プロパティ名は好きに付けることがあ出来ます。

オブジェクトや配列もテンプレートファイルに渡せる

また、文字列や数値などの単純な値だけでなく、オブジェクトや配列など、複数のデータが含まれているデータを渡すこともできます。

以下の画像の緑枠部分では、テンプレートファイルにオブジェクトを渡してピンク枠部分では、テンプレートファイルに配列を渡しています。(※画像をクリックすると別タブで画像が開きます)

res.renderでテンプレートファイルに渡したいデータをセットしている様子res.renderでテンプレートファイルに渡したいデータをセットしている様子

上の画像で実装した内容をブラウザで確認すると以下のような表示になります。(※画像をクリックすると別タブで画像が開きます)

テンプレートファイルにセットしたデータをブラウザで確認した様子テンプレートファイルにセットしたデータをブラウザで確認した様子

テンプレートファイル内で「オブジェクト」「配列」を扱う際には、通常のJavaScriptのようにオブジェクトの場合は「オブジェクト.プロパティ名」で値を取得します。

配列の場合は「for」や「forEach」などでループをして、データを1件1件セットする事ができます

オブジェクトと配列をうまく組み合わせると、掲示板や、Twitterのタイムラインのような、同じ見た目の表示パーツを連続して表示させることができます。

テンプレートファイルから別のテンプレートファイルにデータを渡す方法

includeの第2引数に渡したいデータをセットする

テンプレートファイルから、別のテンプレートファイルにデータを渡したい場合も、基本的には「res.render」と同じような感じで実装できます。

テンプレートファイル内から別のテンプレートファイルを指定するには「include」を使うことを前回記事「【express】Viewの共通パーツの別ファイル化と読み込み方」で解説しました。

そして、「res.render」と同じように、「include」の第2引数に、テンプレートファイルに渡したいデータをJavaScriptのオブジェクト形式でセットします。

テンプレートファイルに外からデータを渡すときの書き方

includeでデータを渡す際の書き方は以下のようになります。

<%- include(‘partials/header’, {title: ‘ページタイトル’}) %>

上記のように記述すると、「partials/header.ejs」内で、以下のようなコードを記述できるようになります。

<title><%= title %></title>

あとは、1つ目に説明した「res.render」でデータを渡す時と同じになります。

まとめ

今回の話をまとめると次のとおりです。

今回のまとめ
  • Expressのres.render」の第2引数にJavaScriptのオブジェクトをセットすることで、テンプレートファイルからプロパティ名経由で値を使うことが出来る
  • EJSのinclude」の第2引数にJavaScriptのオブジェクトをセットすることで、テンプレートファイルからプロパティ名経由で値を使うことが出来る
  • テンプレートファイルには文字列や数値などの単純な値だけでなく、オブジェクトや配列などの複数の情報が含まれるデータも渡すことが出来る

今回の内容は以下の記事内のスライドの補足資料として作成しました。スライドの全部を確認したい方は以下の記事も参照して頂けたらと思います。

あわせて読みたい
【express】テンプレートファイルに外からデータを渡す今回はexpressでViewを生成する際に利用するテンプレートファイルに外からデータを渡す方法を学習します。結論から言うと、res.render, includeの第2引数に渡したいデータをセットすれば良いだけです。外からデータを渡すことで動的なサイトを作れるようになります。...
【3つの特典付き】Webエンジニアに必要な基礎スキルを体系的に効率良く身につけたいですか?

LINE登録で無料特典を受け取る

次のような方向けに、学習をサポートするコンテンツを無料プレゼントしています。

  • Webエンジニアになりたいけど何から学習を始めれば良いかわからない
  • 今まで独学で頑張ってきたけど、独学に限界を感じてきた
  • プログラミングは出来るけど、大きめのコードが書けない

「プレゼント詳細が知りたい」「プレゼントを受け取りたい」といった方は、以下のボタンをクリックして詳細ページをご確認ください。

無料特典を受け取る

 

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です