@@ -193,21 +193,21 @@ console.log(["Apple", "Banana", "Orange"].join("/")); // Apple/Banana/Orange
193193
194194このようにテンプレートリテラルを用いることで、複雑なウェブページの内容を表すことができます。
195195
196- :::tip[ ` String#replace ` ]
196+ :::tip[ ` String#replace ` ] メソッド
197197
198198上記のようにテンプレートリテラルを使って HTML を作成することもできますが、HTML がもっと長くなったり、さらに複雑なプログラムが必要になってきたらこのまま続けていくのは難しそうです。
199199
200200[ ` String#replace ` ] ( https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replace ) メソッドは、第一引数に与えられた文字列に一致する文字列を第二引数の文字列に置き換えた新しい文字列を返します。
201201` String#replace ` メソッドは、最初に一致した場所のみを置き換えます。
202- 一致するすべての場所を置き換えたい場合は、代わりに [ ` String#replaceAll ` ] ( https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll ) を使います 。
202+ 一致するすべての場所を置き換えたい場合は、代わりに [ ` String#replaceAll ` ] ( https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll ) メソッドを使います 。
203203
204204``` js
205205const base = " ABCBCC" ;
206206document .write (base .replace (" BC" , " EFG" )); // AEFGBCC
207207document .write (base .replaceAll (" C" , " T" )); // ABTBTT
208208```
209209
210- ` String#replace ` を用いることで 、長い HTML ファイルを見通しよく記述できるようになり、より簡単に管理することができます 。
210+ ` String#replace ` メソッドを用いることで 、長い HTML を見通しよく記述できるようになります 。
211211
212212``` html title="index.html"
213213<!doctype html>
@@ -226,7 +226,7 @@ document.write(base.replaceAll("C", "T")); // ABTBTT
226226
227227``` js title="main.mjs"
228228import express from " express" ;
229- import fs from " fs" ;
229+ import { readFileSync } from " fs" ;
230230
231231const app = express ();
232232
@@ -243,65 +243,12 @@ app.get("/", (request, response) => {
243243app .listen (3000 );
244244```
245245
246- リクエストを受け取ったとき、プログラムではまず ` fs.readFileSync ` 関数を用いて ` index.html ` ファイルの内容を文字列としてに読み込んでいます 。
246+ リクエストを受け取ったとき、プログラムではまず ` fs.readFileSync ` 関数を用いて ` index.html ` ファイルの内容を文字列として読み込んでいます 。
247247
248- 次の行の ` index .replace` で、読み込んだ HTML ファイルの文字列の中の ` "{users}" ` が ` names ` に対応する、箇条書きを表す文字列に置換されます 。
248+ 次の行の ` template .replace` で、読み込んだ HTML ファイルの中の ` "{users}" ` が ` names ` を箇条書きにした文字列に置換されます 。
249249
250250:::
251251
252- { /* prettier-ignore */ }
253- { /* いったんコメントアウト、必要そうならいい感じにして戻してください
254- :::tip[テンプレートエンジン]
255- 上記のようにテンプレートリテラルを使って HTML を作成することもできますが、HTML がもっと長くなったり、さらに複雑なプログラムが必要になってきたらこのまま続けていくのは難しそうです。
256- [EJS](https://ejs.co/) をはじめとした**テンプレートエンジン**は、プログラミング言語から HTML などを作成する作業を簡単にしてくれます。先ほどのプログラムを、EJS を用いて書き換えると、次のようになります。(手元で試したい場合は `ejs` をインストールしてください)
257-
258- ```javascript title=main.mjs
259- import { readFileSync } from "fs";
260- import express from "express";
261- import { render } from "ejs";
262-
263- const app = express();
264-
265- const names = ["田中", "鈴木", "佐藤"];
266- app.get("/", (request, response) => {
267- const template = readFileSync("template.ejs", "utf-8");
268- const html = render(template, {
269- listItems: names,
270- });
271- response.send(html);
272- });
273-
274- app.listen(3000);
275- ```
276-
277- ```html title=template.ejs
278- <!doctype html>
279- <html lang="ja">
280- <head>
281- <meta charset="utf-8" />
282- <title>Title</title>
283- </head>
284- <body>
285- <ul>
286- <% for (const listItem of listItems) { %>
287- <li><%= listItem %></li>
288- <% } %>
289- </ul>
290- </body>
291- </html>
292- ```
293-
294- <ViewSource url={import.meta.url} path="_samples/ejs-template-engine" />
295-
296- イベントハンドラの中で、プログラムではまず `fs.readFileSync` 関数を用いて `template.ejs` ファイルの内容を読み込んでいます。その次の行の [`ejs.render` 関数](https://ejs.co/#docs) がポイントです。この関数は、第 1 引数にテンプレートを文字列として受け取り、諸々の変換を行った後の文字列を返します。第 2 引数には、変換の際に埋め込みたいデータをオブジェクトの形式で指定します。
297-
298- このオブジェクトのキーと同じ名前の変数が、テンプレート内で利用できます。上の例の `template.ejs` における `listItems` は、`main.mjs` で指定した `{ listItems: names }` により `["田中", "鈴木", "佐藤"]` になります。
299-
300- テンプレート内の `<%` から `%>` で囲まれた部分は、JavaScript のプログラムとして実行されます。また、`<%=` から `%>` で囲まれた部分は JavaScript の式として評価され、最終的な結果に埋め込まれます。
301- :::
302-
303- \*/ }
304-
305252## 課題
306253
307254- Express を用いて、` あなたは n 人目のお客様です。 ` とレスポンスする Web サーバーを作成してください。` n ` はアクセスされるたびに 1 ずつ増えるようにしてください。
0 commit comments