本文へスキップ
totonoe.tech

フレームワークを整える

中級

Sails.js を整える。

= routes.js を書いてリクエストを送る——Node.js の MVC フレームワークの「どこに届くか」をブラウザで確かめる

Sails.js が初めての方は、先に そもそも Sails.js とは・どんな場面で使うか をどうぞ。

サンプル(クリックでエディタと例のリクエストに反映)

「メソッド+パス」をキーに、ビュー・アクション・既定レスポンスを割り当てる

config/routes.js

モデルがあると、ブループリントの影のルート(一覧・取得・作成・更新・削除)が自分で書いたルートの後ろに足されます。

リクエスト

「▶ 送信」を押すと、どのルートに届くかがここに出ます。

ここで動くのは Sails 本体ではなく、Sails v1 のルートの照合規則を再現したものです。アクションの中身(データベースの読み書きなど)は実行しません。

エンドポイントの一覧から routes.js とアクションを作る

1行に1つ「メソッド パス [名前]」を書くと、config/routes.js と、アクション(actions2 形式)の雛形を作ります。パスの値は :id でも {id} でも構いません。

config/routes.js
 
アクション
 

そもそも 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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

運営サイト

私たちが運営するサイト