演習課題「プロフィールページを実装しよう」
霧島京子、六村リオ、緑川つばめの三人のプロフィールページを表示するようにルーティングを実装しましょう。
今、このアプリケーションを起動し、/
にアクセスすると次のようにブラウザに表示されます。
キャラクター
以下からプロフィールを見ることができます
霧島京子
六村リオ
緑川つばめ
それぞれのリンクをクリックすると、以下のパスにアクセスします。
- 霧島京子 →
/profile/kyoko
- 六村リオ →
/profile/rio
- 緑川つばめ →
/profile/tsubame
現状では、これらのどのリンクをクリックしても、デフォルトのプロフィールページを表示するようになっています。
三人のプロフィールページ、及びデフォルトのプロフィールページのそれぞれについて、ページのテンプレートになる
pug
ファイルは次のように用意されています。- 霧島京子のプロフィールは
views/kyoko.pug
- 六村リオのプロフィールは
views/rio.pug
- 緑川つばめのプロフィールは
views/tsubame.pug
- デフォルトのプロフィールページは
views/default.pug
routes/router.js
を編集し、それぞれのリンクに対し、表示されている人のプロフィールページをブラウザに送信するようにしてください。アプリケーションを起動した状態で、採点して、ジャッジに正解すれば演習課題クリアです!
演習課題「パスが長すぎます! - 別の機能を追加してみよう」
今回のチャプターで学んだ、以下のような書き方でのルーティングでは、名前で分岐する意外にも色々なことができるようになります。
router.get("/path/:subpath", (req, res) => {
// ...
});>
例えば、「アクセスしたパスの文字列が長すぎる場合にエラーを送信する」というようなものも実装できてしまいます。作ってみましょう。
今、
routes/router.js
は以下のような記述になっています。routes/router.js
const router = require("express").Router();
router.get("/", (req, res) => {
res.render("index");
});
router.get("/:path", (req, res) => {
const path = req.params.path;
res.render("index");
});
module.exports = router;
どのパスへのリクエストに対しても
views/index.pug
の内容を HTML に変換してブラウザに送信しています。これを変更し、
path
変数の文字列の長さが 100
以上である時に views/too_long.pug
の内容を送信するように変更しましょう。文字列の長さは、
文字列.length
で取得することができます。(長さが
100
未満であれば views/index.pug
を送信してください。)アプリケーションを起動した状態で、採点して、ジャッジに正解すれば演習課題クリアです!
#09:人気投票アプリを完成させよう
このチャプターでは、いままで作ってきた人気投票Webアプリケーションの完成に向けて、リクエストのパラメータによる処理の分岐を実装していきます。
express 4.x API
https://expressjs.com/ja/api.html#req.params
express では、router.get()
の第一引数に指定するパスに、/votes/:name
のように :
から始まる文字列を一部挿入することができます。
そうした場合、任意の /voutes/honyarara
のようなものにマッチすることができ、そのマッチした文字列を req.params.name
として受け取ることができます。
今回は /voutes/:name
として req.params.name
を受け取りましたが、ここは自由に名付けることができます。
/votes/:id
であればreq.params.id
として受け取れます/votes/:character
であればreq.params.character
として受け取れます
以上のようにして受け取ることができます。
routes/router.js
const router = require("express").Router();
let kyokoCount = 0;
let rioCount = 0;
let tsubameCount = 0;
router.get("/", (req, res) => {
res.render("index", { message: "みなさんこんにちは!" });
});
router.get("/votes", (req, res) => {
res.render("votes", { kyokoCount: kyokoCount, rioCount: rioCount, tsubameCount: tsubameCount });
});
router.get("/votes/:name", (req, res) => {
const name = req.params.name;
if (name === "kyoko") {
kyokoCount++;
res.render("results", { fullName: "霧島京子", count: kyokoCount });
} else if (name === "rio") {
rioCount++;
res.render("results", { fullName: "六村リオ", count: rioCount });
} else if (name === "tsubame") {
tsubameCount++;
res.render("results", { fullName: "緑川つばめ", count: tsubameCount });
} else {
res.status(404).render("404");
}
});
module.exports = router;
MDN web docs
https://developer.mozilla.org/ja/docs/Web/HTTP/Status
HTTP レスポンスステータスコードは、クライアント(この Web アプリケーションの場合は主にブラウザ)からのリクエストに対して、そのリクエストの処理がどのように終了したかを表すコードです。
例えば、成功を表すステータスコードは 200、今回のようにページが見つからないような場合は 404、処理方法が分からないエラーの場合は 500 というように、Web の標準として定められています。
サーバや Web アプリケーションは、これらに則る形で動作するように設計することが要求されます。