【Express】Expressのルーティングの基本(GET/POST/パラメータ)

Expressjs

こんにちは、かつコーチです。

Expressでサーバーを立てられるようになった次のステップは、ルーティングを使いこなすことです。

「GETとPOSTって何が違うの?」「URLの中の値ってどうやって取得するの?」という疑問に、この記事でしっかり答えていきます。

実際に動かせるコード例を交えながら、初心者向けに丁寧に解説します。

基本の書き方

ルーティングとは

ルーティングとは、リクエストのURLとHTTPメソッドに応じて、どの処理を実行するかを振り分ける仕組みのことです。

HTTPメソッドとは、リクエストの種類を表す言葉で、代表的なものにGETPOSTがあります。

GETはデータを取得するとき、POSTはデータを送信・登録するときに使われます。

app.getの基本

GETリクエストを処理するには、app.get()を使います。

// index.js
const express = require("express");
const app = express();
app.use(express.json());

app.get("/users", (req, res) => {
  res.send("ユーザー一覧を返します");
});

app.listen(3000, () => {
  console.log("サーバーが起動しました: http://localhost:3000");
});

ブラウザでhttp://localhost:3000/usersにアクセスすると、「ユーザー一覧を返します」と表示されます。

app.postの基本

POSTリクエストを処理するには、app.post()を使います。

app.post("/users", (req, res) => {
  const name = req.body.name;
  res.send(`${name}さんを登録しました`);
});

POSTで送られてきたデータを扱うには、app.use(express.json())を事前に設定しておく必要があります。

これを忘れると、req.bodyundefinedになってしまうので注意してください。

req.paramsでURLの一部を取得する

URLの一部を変数として受け取りたい場合は、req.paramsを使います。

app.get("/users/:id", (req, res) => {
  const userId = req.params.id;
  res.send(`ユーザーID: ${userId}の情報です`);
});

:idのようにコロンを付けた部分が、URLパラメータとして扱われます。

http://localhost:3000/users/5にアクセスすると、「ユーザーID: 5の情報です」と表示されます。

req.queryでクエリ文字列を取得する

URLの末尾に付く?key=value形式のデータは、req.queryで取得します。

app.get("/search", (req, res) => {
  const keyword = req.query.keyword;
  res.send(`検索キーワード: ${keyword}`);
});

http://localhost:3000/search?keyword=expressにアクセスすると、「検索キーワード: express」と表示されます。

req.paramsはURLの一部として必須の値、req.queryは検索条件のような任意の値、と覚えておくと使い分けやすいです。

よくあるつまずきポイント・エラー対処

req.bodyがundefinedになるエラー

私が最初にPOSTリクエストを試したとき、送信したはずのデータが取得できませんでした。

❌ Before

const express = require("express");
const app = express();

app.post("/users", (req, res) => {
  console.log(req.body); // undefined
  res.send(`${req.body.name}さんを登録しました`);
});

このコードを実行すると、以下のエラーが表示されました。

TypeError: Cannot read properties of undefined (reading 'name')

原因は、express.json()ミドルウェアを設定していなかったため、リクエストボディが解析されていなかったことでした。

✅ After

const express = require("express");
const app = express();
app.use(express.json()); // これを追加

app.post("/users", (req, res) => {
  console.log(req.body); // { name: '田中' }
  res.send(`${req.body.name}さんを登録しました`);
});

app.use(express.json())を追加したことで、req.bodyから正しくデータを取得できるようになりました。

POSTのデータが取得できないときは、まずこの設定漏れを疑ってみてください。

まとめ

この記事のポイント

  • ルーティングはURLとHTTPメソッドで処理を振り分ける仕組みである
  • app.get()は取得、app.post()は送信・登録のリクエストに使う
  • URLの一部の値はreq.params、検索条件などはreq.queryで取得する
  • POSTのデータを扱うにはexpress.json()の設定が必須

次に読むべき記事

ルーティングの基本が分かったら、次はミドルウェアの仕組みを学びましょう。

「ミドルウェアとは?express.json()やカスタムミドルウェアの作り方」で、より詳しい処理の流れを解説しています。

タグ: #Express #初心者向け #フレームワーク基礎

タイトルとURLをコピーしました