ルーティング
パスごとに処理を分ける
前のレッスンで app.get を 2 つ書きました。あの 1 行ずつがルートです。パスと処理の結びつきを 1 件登録した、という意味になります。
JavaScript
app.get("/", (req, res) => res.send("Hello fleama"));
app.get("/about", (req, res) => res.send("フリマアプリ fleama です"));リクエストが届くと、Express は登録されたルートを上から順に見て、最初に合ったものを動かします。合うものが無ければ 404 を返します。この見分けが、前々回に if で書いていた処理の中身です。
上から順に見る、の意味
順に見るので、書く順番が結果を変えることがあります。
JavaScript
app.get("/items/new", (req, res) => res.send("出品フォーム"));
app.get("/items/:id", (req, res) => res.send("商品の詳細"));:id は「何でも入る場所」を表す書き方で、次のレッスンで詳しく扱います。ここで大事なのは、この 2 つを逆に書くと /items/new が :id に吸い込まれてしまうことです。具体的なパスを先、何でも合うパスを後に置きます。
メソッドが違えば別のルート
同じパスでも、メソッドが違えば別々に登録できます。
JavaScript
app.get("/items", (req, res) => res.send("一覧"));
app.post("/items", (req, res) => res.send("登録"));GET /items と POST /items は、パスは同じでも別のルートです。第4章で作る API は、この組み合わせが土台になります。
送り返す方法
res には返し方がいくつかあります。ここまで使ってきたのは send です。
| 書き方 | 何を返すか |
|---|---|
res.send("文字列") | 文字列をそのまま |
res.json({ ... }) | JSON |
res.status(404).send(...) | コードを指定して返す |
res.json は次のレッスンで使います。
1 つのリクエストに返せる応答は 1 回だけです。res.send を 2 回書くとエラーになります。分岐したときは、返したらその場で処理を終えてください。
手を動かす
演習では、ルートを 3 つ登録します。パスごとに違う応答を返し分けてください。
要件
GET /に対してHello fleamaを返すGET /aboutに対してフリマアプリ fleama ですを返すGET /itemsに対して商品一覧ですを返す
入出力例
request("GET", "/") → "200 Hello fleama"
request("GET", "/about") → "200 フリマアプリ fleama です"
request("GET", "/items") → "200 商品一覧です"ヒント
編集 ゆめさく編集部