【Node.js + Express】リクエストからパラメーターを取得する
目次
今回は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でパラメーター取得を使いこなせばかなり開発の幅が広がると思います。
是非参考にしてみてください!
それでは今回はここまで。
お疲れ様でした!