adonisで複数のroutesファイルを使う



Node.js製のMVCフレームワーク「adonis.js」で複数のrouteファイルを使用する方法の説明です。

ページの種類やajax処理が多くなり、コントローラーのメソッドの数が増えてくると、routeファイル内のコードがどうしても長くなります。
( * 通常はapp/Http/routes.js内にroute処理を書いていきます )

adonisにはLaravelフレームワーク同様、routeをグループ化するgroup関数が用意されていますが、可視性が上がっても コード量を減らすことには繋がりません。

// Route grouping
Route.group('user group',() => {
  // GET: user/all
  Route.get('/all', 'UserController.all')
  
  // go on ...

}).prefix('/user')


開発中のアプリケーションの規模が大きくなってくると、
" フロント用、ajax用にRoutesファイルを分離したほうが管理しやすい。。"
というケースはよく出てくるので、複数のroutesファイルを使えるようにしてみましょう!
( * バージョン3.0.1を使って動作確認しました )
 

bootstrap/http.jsファイルの編集

adonisのrouteファイルの設定は"bootstrap/http.js"内に記述されています。

// bootstrap/http.js
/*
|--------------------------------------------------------------------------
| Load Middleware And Routes
|--------------------------------------------------------------------------
|
| Middleware and Routes are required to oil up your HTTP server. Here we
| require defined files for same.
|
*/

// middlewareの登録をするファイル * 'app/Http/kernel.js'
use(Helpers.makeNameSpace('Http', 'kernel'))
// デフォルトのrouteを読み込む処理 * 'app/Http/routes.js'
use(Helpers.makeNameSpace('Http', 'routes'))

上の処理は、Adonis用に用意された、use()関数を使ってファイルを読み込んでいます。

Helpers.makeNameSpaceはヘルパー関数内の1つで、appから始まるネームスペースを返してくれます。

/* e.x.p */
const Helpers = use('Helpers')
// makeNameSpace(directory, toFile)
console.log(Helpers.makeNameSpace('Helpers', 'url')) // app/Helpers/url.js


Routeファイルの追加

っということで複数のrouteファイルが使えるように処理を書いていきます!

方法は簡単でhttp.js内にuseメソッドを使って、読み込みたいrouteファイルを指定するだけです。

// bootstrap/http.js
use(Helpers.makeNameSpace('Http', 'kernel')) // * default
use(Helpers.makeNameSpace('Http', 'routes')) // * default
      
/* custom routes */
// path: app/Routes/*
use(Helpers.makeNameSpace('Routes', 'web')) // web.js
use(Helpers.makeNameSpace('Routes', 'api')) // api.js
      
// app/Http/costom-route.js
// use(Helpers.makeNameSpace('Http', 'custom-route'))

// app/Http/Routes/ajax.js
// use(Helpers.makeNameSpace('Http/Routes', 'ajax'))

// call route file from outside 'app' directory.
// appディレクトリ外から呼び出す場合
// use(Helpers.basePath() + '/routes/web.js') // routes/web.js


これで、複数のrouteファイルが使えるようになりました。

その後は通常のroutesと同じ書き方で処理が出来るようになります!

'use strict'

// Http/Routes/web.js
const Route = use('Route')

// route group
Route.group('Frontend side route', () => {
  // GET: /web/hello
  Route.get('/hello', (request, response) => {
    response.send('from app/Routes/web.js!!');
  });

}).prefix('/web');


Summary

以上がadonisで複数のrouteファイルを使う説明でした。

routeファイルのコードをスッキリしたい時や、処理によって分けたい時に使うと便利そうですね!

Adonis: Routing

 

この記事のカテゴリ
プログラミング

この記事のタグ