バックエンド開発

【Node.js + Express】リクエストからパラメーターを取得する

【Node.js + Express】リクエストからパラメーターを取得する

目次

  1. クエリパラメーターを取得する
  2. パスパラメーターを取得する
  3. パスパラメーターに条件をつける
  4. app.paramでパラメーターに共通処理を施す
  5. まとめ

今回はExpressにて、リクエストされてきたURIに付与されているパラメーターを取得して処理をするということをやってみたいと思います。

パラメーターはURIを介してデータを送ってくることができて、とても便利なものですので、様々な場面で活用されます。

そんなWebアプリケーション開発において非常に重要なパラメーターをExpressにて扱う方法は押さえておきたい項目です。

下記記事でパラメーターに関して少し解説していますので、ご参考ください。

【Vue + vue-cli】vue-routerでパラメーターを設定、取得 – パラメーターとは?
https://www.dailyupblog.com/web_development/834/#chapter-1

それではいきましょう!

クエリパラメーターを取得する

まずはクエリパラメーターを取得する方法です。

任意のディレクトリに「express-test」というフォルダを作成しましょう。

その中に下記記事の手順通りにexpressを導入します。

【Node.js + Express】NodeのフレームワークExpressとは?導入とHello world表示 – Expressを導入する
https://www.dailyupblog.com/backend_development/1000/#chapter-2

expressの導入が完了したら、app.jsファイルを作成しましょう。

app.jsには下記の様に記述してください。

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

app.get("/hello", function (req, res) {
  res.send(`Hello, ${req.query.name}`);
});

app.listen(8080);
console.log("server listening...");

クエリパラメーターを取得する方法です。

「/hello」というリクエストURIにアクセスした際に、クエリパラメーターで送ったnameパラメーターの値を取得して、文字列を返します。

クエリパラメーターを取得する記述は下記です。

req.query.パラメーター名

「node app.js」でnodeを起動してください。

その後、ブラウザで「http://localhost:8080/hello?name=Yamada」にアクセスしてみてください。

下記の様に表示されるはずです。

パスパラメーターを取得する

続いてはパスパラメーターを取得する方法です。

app.jsに以下のように記述してください。

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

app.get("/hello/:name", function (req, res) {
  res.send(`Hello, ${req.params.name}`);
});

app.listen(8080);
console.log("server listening...");

パスパラメーターの場合は、あらかじめパラメーター名を記述しておいて、「req.params.パラメーター名」で取得することができます。

app.get("/hello/:name", function (req, res) {
  res.send(`Hello, ${req.params.name}`);
});

これでブラウザで「http://localhost:8080/hello/Tanaka」にアクセスしてみてください。

下記の様に表示されるはずです。

パスパラメーターに条件をつける

取得してきたパスパラメーターに条件をつけることもできます。

条件に合わないデータが来た場合はエラーを返します。

app.jsを開き、下記の様に記述してください。

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

app.get("/item/:id([0-9]+)", function (req, res) {
  res.send(`item No.${req.params.id}`);
});

app.listen(8080);
console.log("server listening...");

この様にパラメーター名の後に丸括弧()をつけてその中に条件を書くことができます。

今回は下記の様に

"/item/:id([0-9]+)"

0から9の数値に限定するという条件にしました。

まずブラウザにて、「http://localhost:8080/item/56」にアクセスしてみてください。

すると下記の様に表示されるはずです。

問題なく表示されました。

ですが、今度は数値ではなく文字列を渡してみましょう。

ブラウザにて、「http://localhost:8080/item/Hello」にアクセスしてみてください。

すると、エラーになったと思います。

app.paramでパラメーターに共通処理を施す

Expressでは「app.param」を使えば、get処理などの前にパラメーターに対して別処理を施すことができます。

例を見ていきましょう。

app.jsを開いて、下記を記述してください。

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

app.param("id", function (req, res, next, id) {
  const users = ["マイケル", "スティーブ", "ジェシカ"];
  req.params.name = users[id];
  next();
});

app.get("/hello/:id", function (req, res) {
  res.send(`Hello, ${req.params.name}`);
});

app.listen(8080);
console.log("server listening...");

上記の例では、get処理の前に「app.param」の処理を記述しています。

第一引数にとってくるパラメーター名を入れます。

今回は「id」です。

そして、第二引数に関数を入れて、コールバック関数にしています。

この関数には第一引数と第二引数にはそれぞれreqとresを入れ、第三引数には「next」を入れています。

nextは処理を終了させて、次の処理に進める時に使うものです。

第四引数には今回のidパラメーターを入れます。

今回は「users」というは配列を作りこの中に三つの名前を入れています。

そして、引っ張ってきたidパラメータの数値のインデックス番号に位置する名前をreq.params.nameに入れるという処理を書きました。

最後はnext()で処理を終了させています。


app.param("id", function (req, res, next, id) {
  const users = ["マイケル", "スティーブ", "ジェシカ"];
  req.params.name = users[id];
  next();
});

そして、app.getではapp.paramで取得済みの名前を「Hello,」付きで返すという処理を書いています。

app.get("/hello/:id", function (req, res) {
  res.send(`Hello, ${req.params.name}`);
});

これでnodeを起動し、ブラウザにて、「localhost:8080/hello/1」にアクセスしてみてください。

下記の様に表示されるはずです。

これがapp.paramでパラメーターに共通処理を施す方法です。

まとめ

今回はExpressにてパラメーターの取得方法についてまとめました。

パラメーターはWebアプリケーションにおいて、データベースからデータを取得する際の、データの識別値のような役割を担ったりもしますので、非常に重要なものです。

ですので、Expressでパラメーター取得を使いこなせばかなり開発の幅が広がると思います。

是非参考にしてみてください!

それでは今回はここまで。

お疲れ様でした!

関連記事

関連記事