読者です 読者をやめる 読者になる 読者になる

LoopBack 入門

門を叩きます。

LoopBack - Node.js framework

インストール

$ npm install -g loopback-cli

アプリケーションの作成

$ lb

     _-----_     
    |       |    ╭──────────────────────────╮
    |--(o)--|    │         LoopBack         │
   `---------´   │ アプリケーションを作成しましょう。 │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |     
   __'.___.'__   
 ´   `  |° ´ Y ` 

なんか出たw

? アプリケーションの名前は何ですか? hello_loopback
? プロジェクトを格納するディレクトリーの名前を入力してください: hello_loopback
   create hello_loopback/
     info 作業ディレクトリーを hello_loopback に変更します

? どのバージョンの LoopBack を使用しますか? 3.x (current)
? どのようなタイプのアプリケーションにしますか? hello-world (A project containing a controller, including a single vanilla Message and a single remote method)
.yo-rc.json の生成中

メニューによっては上下キーで選択もできる。すごい。

いろいろモジュールがインストールされたら最後に以下の出力。

次のステップ:

  アプリケーションのディレクトリーに移動します
    $ cd hello_loopback

  アプリケーションでモデルを作成します
    $ lb model

  アプリケーションを実行します
    $ node .

The API Connect team at IBM happily continues to develop,
support and maintain LoopBack, which is at the core of
API Connect. When your APIs need robust management and
security options, please check out http://ibm.biz/tryAPIC

インストラクションに従ってモデルを作成する。

$ cd hello_loopback
$ lb model
? モデル名を入力します: person
? person を付加するデータ・ソースを選択します: db (memory)
? モデルの基本クラスを選択します PersistedModel
? REST API を介して person を公開しますか? Yes
? カスタム複数形 (REST URL の作成に使用します): people
? 共通モデルですか、あるいはサーバー専用ですか? 共通
では、person プロパティーをいくつか追加しましょう。

完了したら、空のプロパティー名を入力してください。
? プロパティー名: 

モデルのプロパティを入力していく。

? プロパティー名: name
   invoke   loopback:property
? プロパティー・タイプ: string
? 必須 Yes
? デフォルト値 [なしの場合は空白のまま]: 

別の person プロパティーを追加しましょう。
完了したら、空のプロパティー名を入力してください。
? プロパティー名: age
   invoke   loopback:property
? プロパティー・タイプ: number
? 必須 Yes
? デフォルト値 [なしの場合は空白のまま]: 20

別の person プロパティーを追加しましょう。
完了したら、空のプロパティー名を入力してください。
? プロパティー名: 

モデルができたらアプリケーションを起動(!)

$ node .

起動したら http://0.0.0.0:3000/explorer/ にアクセス。

作成したモデルの POST を開いて、適当なデータをPOST。

f:id:kozy4324:20170223181006p:plain

内部で curl とか叩いてくれているっぽい。

f:id:kozy4324:20170223181158p:plain

GET を開いてリクエストすると作成した値が返ってきた。

f:id:kozy4324:20170223181412p:plain

うん、コード書かずに簡単な RESTful API ができてる。なお DB は設定していないのでアプリ再起動でデータは消える。DB設定すれば簡単に永続化もできそう。

モデル作成時のファイル差分

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   common/models/message.json
    modified:   server/middleware.json
    modified:   server/model-config.json

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    common/models/person.js
    common/models/person.json

no changes added to commit (use "git add" and/or "git commit -a")

common/models/ 以下にモデル定義とモデルクラスのソースが出力される。

server/model-config.json に列挙されたモデルの情報が入る。

$ git diff server/model-config.json 
diff --git a/server/model-config.json b/server/model-config.json
index a432664..6b901f0 100644
--- a/server/model-config.json
+++ b/server/model-config.json
@@ -37,5 +37,9 @@
   },
   "Message": {
     "dataSource": null
+  },
+  "person": {
+    "dataSource": "db",
+    "public": true
   }
 }

server/datasources.json で DB の接続情報が書けそうだ。

$ cat server/datasources.json 
{
  "db": {
    "name": "db",
    "connector": "memory"
  }
}

server/server.js がエントリーポイントだろう。また server/boot/root.js で middleware 設定してた。これは loopback-boot 関連なのかな。

$ cat server/boot/root.js 
'use strict';

module.exports = function(server) {
  // Install a `/` route that returns server status
  var router = server.loopback.Router();
  router.get('/', server.loopback.status());
  server.use(router);
};

server/component-config.json/explorer の定義もあるな。

$ cat server/component-config.json 
{
  "loopback-component-explorer": {
    "mountPath": "/explorer"
  }
}

全体のディレクトリ構成

$ ls
client      common      node_modules    package.json    server
  • client にはフロントエンドリソースを格納せよと書いてあった
  • common はモデル情報入っている
  • server にはWebアプリ実装が入っている