@@ -193,6 +193,61 @@ console.log(["Apple", "Banana", "Orange"].join("/")); // Apple/Banana/Orange
193193
194194このようにテンプレートリテラルを用いることで、複雑なウェブページの内容を表すことができます。
195195
196+ :::tip[ ` String#replace ` ]
197+
198+ 上記のようにテンプレートリテラルを使って HTML を作成することもできますが、HTML がもっと長くなったり、さらに複雑なプログラムが必要になってきたらこのまま続けていくのは難しそうです。
199+
200+ [ ` String#replace ` ] ( https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replace ) メソッドは、第一引数に与えられた文字列 (または[ 正規表現] ) に一致する文字列を第二引数の文字列に置き換えた新しい文字列を返します。
201+ 第一引数が文字列の場合は、最初に一致した場所のみを置き換えます。
202+ 一致するすべての場所を置き換えたい場合は、代わりに [ ` String#replaceAll ` ] ( https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll ) を使います。
203+ 元の文字列は変更されません。
204+
205+ ``` js
206+ const base = " ABCBCC" ;
207+ document .write (base .replace (" BC" , " EFG" )); // AEFGBCC
208+ document .write (base .replaceAll (" C" , " T" )); // ABTBTT
209+ ```
210+
211+ これと ` fs.readFileSync ` 関数を用いることで、HTML を別のファイルに分けて保存することができるようになり、より簡単に管理することができます。
212+
213+ ``` js title="main.mjs"
214+ import express from " express" ;
215+ import fs from " fs" ;
216+
217+ const app = express ();
218+
219+ const names = [" 田中" , " 鈴木" , " 佐藤" ];
220+ app .get (" /" , (request , response ) => {
221+ const index = fs .readFileSync (" ./index.html" , " utf-8" );
222+ const html = index .replace (
223+ " {users}" ,
224+ names .map ((user ) => ` <li>${ user} </li>` ).join (" " ),
225+ );
226+ response .send (html);
227+ });
228+
229+ app .listen (3000 );
230+ ```
231+
232+ ``` html title="index.html"
233+ <!doctype html>
234+ <html lang =" ja" >
235+ <head >
236+ <meta charset =" utf-8" />
237+ <title >Title</title >
238+ </head >
239+ <body >
240+ <ul >
241+ {users}
242+ </ul >
243+ </body >
244+ </html >
245+ ```
246+
247+ :::
248+
249+ { /* prettier-ignore */ }
250+ { /* いったんコメントアウト、必要そうならいい感じにして戻してください
196251:::tip[テンプレートエンジン]
197252上記のようにテンプレートリテラルを使って HTML を作成することもできますが、HTML がもっと長くなったり、さらに複雑なプログラムが必要になってきたらこのまま続けていくのは難しそうです。
198253[EJS](https://ejs.co/) をはじめとした**テンプレートエンジン**は、プログラミング言語から HTML などを作成する作業を簡単にしてくれます。先ほどのプログラムを、EJS を用いて書き換えると、次のようになります。(手元で試したい場合は `ejs` をインストールしてください)
@@ -235,6 +290,8 @@ app.listen(3000);
235290
236291<ViewSource url={import.meta.url} path="_samples/ejs-template-engine" />
237292
293+ \*/ }
294+
238295イベントハンドラの中で、プログラムではまず ` fs.readFileSync ` 関数を用いて ` template.ejs ` ファイルの内容を読み込んでいます。その次の行の [ ` ejs.render ` 関数] ( https://ejs.co/#docs ) がポイントです。この関数は、第 1 引数にテンプレートを文字列として受け取り、諸々の変換を行った後の文字列を返します。第 2 引数には、変換の際に埋め込みたいデータをオブジェクトの形式で指定します。
239296
240297このオブジェクトのキーと同じ名前の変数が、テンプレート内で利用できます。上の例の ` template.ejs ` における ` listItems ` は、` main.mjs ` で指定した ` { listItems: names } ` により ` ["田中", "鈴木", "佐藤"] ` になります。
@@ -255,3 +312,4 @@ app.listen(3000);
255312解答例 2:
256313
257314<ViewSource url = { import .meta .url } path = " _samples/server-or-client" />
315+ ````
0 commit comments