Skip to content

Commit 2033ac7

Browse files
committed
レビュー反映
・readFileSync ・誤字修正 ・index -> template ・メソッド!!! ・コード下の説明の微調整 ・コード上の説明の一部削除
1 parent 51b4c0b commit 2033ac7

File tree

1 file changed

+6
-59
lines changed

1 file changed

+6
-59
lines changed

docs/3-web-servers/04-server/index.mdx

Lines changed: 6 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -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
205205
const base = "ABCBCC";
206206
document.write(base.replace("BC", "EFG")); // AEFGBCC
207207
document.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"
228228
import express from "express";
229-
import fs from "fs";
229+
import { readFileSync } from "fs";
230230

231231
const app = express();
232232

@@ -243,65 +243,12 @@ app.get("/", (request, response) => {
243243
app.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

Comments
 (0)