こんにちは、かつコーチです。
Expressでサーバーを立てられるようになった次のステップは、ルーティングを使いこなすことです。
「GETとPOSTって何が違うの?」「URLの中の値ってどうやって取得するの?」という疑問に、この記事でしっかり答えていきます。
実際に動かせるコード例を交えながら、初心者向けに丁寧に解説します。
基本の書き方
ルーティングとは
ルーティングとは、リクエストのURLとHTTPメソッドに応じて、どの処理を実行するかを振り分ける仕組みのことです。
HTTPメソッドとは、リクエストの種類を表す言葉で、代表的なものにGETとPOSTがあります。
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.bodyがundefinedになってしまうので注意してください。
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 #初心者向け #フレームワーク基礎