はじめに
ExpressのRouterオブジェクトについて調べたのでまとめました。
開発環境
OS : Windows10
エディター : VSCode
Express Version : 4.17
ファイル構成
>tree
.
|-app.js
|-route
|-event.js
Express Router
expressのルーティング処理を行うオブジェクトです。
GETやPOSTなどのリクエストに対して簡単にレスポンスを記述できます。
routerオブジェクトにはミドルウェアの設定やHTTPメソッドに対するルート処理を記述できます。
const router = require("./route/event");
const app = express();
// routerを読み込む
// /events以下はevent.jsに任せる
app.use("/events", require("./route/event.js"));
app.listen(3000);
const router = require("express").Router();
router.get("/", (req, res) => {
res.send("/evnets/");
});
module.exports = router; // 外部から読み込むために
http://localhost:3000/events にアクセスすると/events/が表示されます。
Router メソッド
Routerオブジェクトのメソッドを少し調べたので、下にまとめます。
router.all(path, [callback, ...] callback)
指定したパスへのアクセスに足してコールバックを呼び出します。認証が必要な際に利用できます。
次のコードはアクセスされた際に認証を行い、その後にユーザー情報を読み込みます。
下のコード以降に記述したルートに対して有効になります。
router.all('*', requireAuthentication, loadUser)
router.METHOD(path, [callback, ...] callback)
GET, POST, PUTなどのHTTPメソッドに対してルーティングを設定できます。
pathには正規表現も使えます。
router.get('/', function (req, res) {
res.send('hello world')
})
router.param()
ルートパラメーターをもとにコールバック関数を呼び出すかどうか設定できます。
const router = require("express").Router();
// idというルートパラメータが使われる際に処理を行う。
// 今回はhttp://localhost:3000/3 アクセスをしてみる
router.param("id", (req, res, next, id) => {
console.log("id : " + id); // id : 3
next();
});
// idをルートパラメータとする
router.get("/:id", (req, res) => {
res.send("/evnets/");
});
module.exports = router;
router.route(path)
routerインスタンスを生成します。
複数のHTTPメソッドに対するルートを定義する際に使えます。
下の例ではGET、PUTにはアクセス可能で、POST、DELETEではエラーが発生します。
router.route('/users/:user_id')
.all(function (req, res, next) {
// ここにコールバック関数を定義すれば、
// 各HTTPメソッドに対する処理の前に呼ばれます。
next()
})
.get(function (req, res, next) {
res.json(req.user)
})
.put(function (req, res, next) {
// 更新処理
res.json(req.user)
})
.post(function (req, res, next) {
next(new Error('not implemented'))
})
.delete(function (req, res, next) {
next(new Error('not implemented'))
})
router.use([path],[function, ...] function)
app.useと似たような処理を行います。
router.useではサブパスに対してルーティング設定を行えます。
var router = express.Router();
app.use('/first', router); // Mount the router as middleware at path /first
router.get('/sud', smaller); // first/subに対するアクセスはsmallerルーターに処理を任せます。
router.get('/user', bigger); // first/userに対するアクセスはbiggerルーターに処理を任せます。
おわりに
router.METHODについては使用したことがあったのですが、その他はあまり使ったことがなかったので勉強になりました。
次はEJS、gulp, eslintについて調べようと思います。