フレームワークを整える
中級Sails.js を整える。
= routes.js を書いてリクエストを送る——Node.js の MVC フレームワークの「どこに届くか」をブラウザで確かめる
Sails.js が初めての方は、先に そもそも Sails.js とは・どんな場面で使うか をどうぞ。
サンプル(クリックでエディタと例のリクエストに反映)
「メソッド+パス」をキーに、ビュー・アクション・既定レスポンスを割り当てる
モデルがあると、ブループリントの影のルート(一覧・取得・作成・更新・削除)が自分で書いたルートの後ろに足されます。
「▶ 送信」を押すと、どのルートに届くかがここに出ます。
ここで動くのは Sails 本体ではなく、Sails v1 のルートの照合規則を再現したものです。アクションの中身(データベースの読み書きなど)は実行しません。
エンドポイントの一覧から routes.js とアクションを作る
1行に1つ「メソッド パス [名前]」を書くと、config/routes.js と、アクション(actions2 形式)の雛形を作ります。パスの値は :id でも {id} でも構いません。
そもそも Sails.js とは
Node.js で、画面と API を決まった型で素早く作る道具。
Sails.js は、JavaScript の実行環境 Node.js の上で動くMVC 型のフレームワークです。MVC とは、データ(モデル)・画面(ビュー)・処理(コントローラー)を分けて整理する考え方で、URL との対応は config/routes.js という1つのファイルにまとめます。
Node.js の定番 Web ライブラリ Express の上に作られていて、データベースの読み書きを担う仕組み(Waterline)や、モデルから API の入り口を自動で用意する機能などを最初から備えています。「部品を自分で選ぶ」より「型に沿って早く作る」ことを重視した道具です。
どこで・どんな場面で使うか
-
業務システム・管理画面のバックエンド
データの一覧・登録・更新・削除が中心の画面と API を、決まった型でそろえて作りたいときに使われます。
-
API サーバー
モデルを作ると基本的な API の入り口を用意できるため、スマホアプリや別の画面向けのデータ提供にも使われます。
-
リアルタイム通信を含むアプリ
WebSocket による通信の仕組みが組み込まれているので、通知やチャットのような画面更新にも向きます。
-
Node.js の MVC を学ぶ
ルーティング、モデル、アクションの分け方を、決まった型の中で学べます。
-
既存の Sails 案件の保守
すでに Sails で作られたシステムの改修では、routes.js の読み方が最初の入口になります。
向いている場面・向いていない場面
- 向いている:データの出し入れが中心の業務アプリ。決まった型に沿うので、チームで書き方がそろいます。
- 向いている:URL と処理の対応を1か所で見渡したいとき。routes.js を読めば全体像がつかめます。
- 注意:小さな API や、構成を細かく自分で決めたい場面では、より軽い道具のほうが合うことがあります。
上の練習場で routes.js を書き、リクエストがどのルートに一致するかを試してみてください。
Sails のルーティングの決まりごと
Express の上に作られた Sails は、URL の対応を1つのファイルに集め、モデルがあれば API の入り口まで自動で用意します。覚えておくと迷わない4つの決まりです。
- ①
キーは「メソッド+パス」、値は届け先
届け先はアクション(
'user/find')・ビュー({ view: 'pages/homepage' })・既定のレスポンス({ response: 'notFound' })の3種類。メソッドを書かないとすべてのメソッドに一致します。 - ②
値は req.param() と req.allParams() で受け取る
:idは「/」を含まない1区切り、:page?は省略可、*は残り全部。req.allParams()はパスの値・クエリ・ボディを1つにまとめ、同じ名前ならパスの値が勝ちます。 - ③
モデルがあれば、REST の入り口が自動で生える
ブループリント(
config/blueprints.jsのrest: true)が、GET /user・GET /user/:id・POST /user・PATCH /user/:id・DELETE /user/:idを用意します。自分で同じパスを書けば、そちらが先に照合されます。 - ④
上から順に照合し、最初の一致が勝つ
'GET /shop/:slug'を'GET /shop/cart'より先に書くと、cart にはたどり着けません。どれにも一致しなければ、メソッドが違うだけでも 404 Not Found(見つかりません) です(405 にはなりません)。
このページについて
Sails.js は Node.js の上で動くため、ブラウザの中では本体を起動できません。このページは、あなたが書いた config/routes.js を文字として読み取り(コードは実行しません)、Sails v1 のルートの照合規則に沿って「どのルートに一致し、どの値が受け取れるか」を再現します。関数を値に書くなど、この練習場が読めない書き方はエラーとして知らせます。
ポリシー(config/policies.js)やショートカット・ブループリント、正規表現のルート、データベースの読み書きは再現していません。本番の挙動は Sails の公式ドキュメントで確かめてください。
書いたコードとリクエストは端末内で処理し、外部へ送信しません(送信ゼロ)。外部のライブラリも読み込みません。
このツールについて
Sails.js は Node.js の上で動く MVC フレームワーク。URL とアクションの対応は config/routes.js の1か所にまとめて書きます。ここでは routes.js を書いてリクエストを送ると、どのルートに一致し、どの値が受け取れるかをその場で確かめられます。
Sails.js の routes.js を書いてリクエストを送ると、どのアクションに届き、req.param() に何が入るかをその場で再現。ブループリントの自動ルートと「書く順番」の落とし穴まで。
主な機能
- 4サンプル(ルートの基本・パスのパラメータ・ブループリント・書く順番)
- 一致したルート・req.param()・req.allParams()・照合の順番を表示
- モデル名を入れるとブループリントの影のルートを追加
- エンドポイント一覧から routes.js とアクションの雛形を生成・送信ゼロ
よくある質問
Q. Sails.js 本体がブラウザで動いているのですか?
A. 動いていません。Sails は Node.js の上で動くため、ブラウザでは起動できません。このページは config/routes.js を文字として読み取り、Sails v1 のルートの照合規則どおりに「どのルートに一致し、どの値が受け取れるか」を再現しています。アクションの中身は実行しません。
Q. メソッドが違うのに 405 ではなく 404 になるのはなぜですか?
A. Sails はルートを上から順に照合し、メソッドとパスの両方が合うものが無ければ、既定の notFound(404)を返すためです。同じパスで別のメソッドのルートがあっても 405 にはなりません。
Q. ブループリントとは何ですか?
A. モデル(api/models/User.js など)があるだけで、一覧・1件取得・作成・更新・削除の API の入り口を自動で用意する仕組みです。自分で書いたルートの後ろに並ぶので、同じパスを自分で書けばそちらが先に使われます。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。