6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Express Router

Last updated at Posted at 2020-12-25

はじめに

ExpressのRouterオブジェクトについて調べたのでまとめました。

開発環境

OS : Windows10
エディター : VSCode
Express Version : 4.17

ファイル構成

>tree
.
|-app.js
|-route
    |-event.js

Express Router

expressのルーティング処理を行うオブジェクトです。
GETやPOSTなどのリクエストに対して簡単にレスポンスを記述できます。
routerオブジェクトにはミドルウェアの設定やHTTPメソッドに対するルート処理を記述できます。

app.js
const router = require("./route/event");
const app = express();

// routerを読み込む
// /events以下はevent.jsに任せる
app.use("/events", require("./route/event.js"));

app.listen(3000);
route/event.js
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について調べようと思います。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?