http://loopback.io/getting-started/
使用 StrongLoop 建立 Node.js MySQL 應用程序
StrongLoop 是 IBM 的一家子公司,StrongLoop API Platform 構建於開源的 LoopBack.io 之上,後者是一個高度可擴展的 Node.js API 框架。藉助 LoopBack,您能夠快速建立可擴展的 API 和數據庫映射。StrongLoop 還擁有內置的移動後端即服務 (MBaaS) 特性,好比推送和離線同步,並且擁有一些圖形工具,可用來集羣化、分析和監視 Node 應用程序。StrongLoop 在 Express Node.js Web 應用程序框架之上運行,並且符合 Swagger 2.0 規範。html
0 評論:前端
, 雲計算技術專家, IBMnode
2015 年 10 月 20 日mysql
- 內容
在 IBM Bluemix 雲平臺上開發並部署您的下一個應用。git
開始您的試用web
這篇簡短教程將展現使用 StrongLoop API 未來自 MySQL 數據庫的數據與 Node.js 相集成的步驟。咱們不要求掌握命令行之外的任何工具!完成本教程後,您將可以瀏覽生成的 API:sql
在這裏,您可以使用 StrongLoop API Explorer 來 POST 數據,並在所選的數據庫瀏覽器中檢查結果。shell
開始以前
除了命令行以外,下面是一些必備工具:數據庫
- 一個本地 Node.js 安裝(參見 Node.js 下載,或者若是您更喜歡 Eclipse 環境,請參見 Nodeclipse 下載)
- Node.js 可執行 npm,用於 Node.js 的包管理器
固然,您還須要一個 Bluemix 賬戶。npm
在應用程序中使用 StrongLoop 以前,必須安裝 StrongLoop 命令行工具。這些工具包括 slc、StrongLoop Process Manager 的命令 shell、strong-pm 和 LoopBack API 框架(包含 CLI 和 GUI)。要安裝 StrongLoop 工具,請執行下面這條 npm 命令:
npm install -g strongloop
要驗證 LoopBack 是否安裝成功,可鍵入
它應該顯示了您的 StrongLoop 安裝的版本。
回頁首
建立一個骨架 LoopBack 應用程序
切換到您的開發目錄。
cd <development_directory>
使用下面這條命令,建立一個名爲「<alias>-loopback-example」的新應用程序(好比 amyla-loopback-example)。
slc loopback <alias>-loopback-example
輸入應用程序名稱和安裝目錄,以便完成新 StrongLoop 項目的初始化。您如今已經有一個完整的 Node.js StrongLoop 應用程序。嘗試運行您的應用程序並打開資源管理器頁面。
cd <alias>-loopback-example
node server/server.js
若是發生相似「Cannot find module ‘loopback'」的錯誤,可運行 npm install 將所需的模塊安裝在 node_modules 目錄中。單擊 show/hide 連接顯示您的新應用程序隨帶的 StrongLoop API:
回頁首
安裝 StrongLoop MySQL 鏈接器
接下來,咱們將經過安裝 LoopBack MySQL 鏈接器,向項目添加對 MySQL 數據庫的支持。運行下面這條命令來安裝 StrongLoop MySQL 鏈接器:
cd <alias>-loopback-example
npm install --save loopback-connector-mysql
回頁首
配置數據源
如今咱們已經添加了適當的數據庫支持,您必須爲數據源配置數據庫鏈接。建立和配置一個名爲「AccountDb」的新數據源。
slc loopback:datasource AccountDb
接受默認數據源名稱。對於數據庫類型,選擇 MySQL。
回頁首
建立一個 Node.js 應用程序和 MySQL 服務
如今咱們已有一個在 localhost 上運行的有效的 StrongLoop 應用程序,咱們將嚮應用程序添加一個 MySQL 鏈接,所以必須先建立一個想要鏈接到的 MySQL 實例。
若是已有一個想要使用的現有的 MySQL 數據庫實例,您能夠跳過這一步,使用您現有的服務的 MySQL 憑據。
我將在 Bluemix 中建立一個新 MySQL 數據庫實例。若是沒有 Bluemix 賬戶,請註冊一個免費的 Bluemix 試用版賬戶。
- 登陸到 Bluemix 控制檯:console.ng.bluemix.net。
- 轉到儀表板。
- 在「Cloud Foundry Apps」下,單擊「CREATE APP」。
- 選擇「WEB」。
- 選擇「SDK for Node.js」並單擊「CONTINUE」。
- 在「APP NAME」上輸入應用程序名稱「<alias>-loopback-example」並單擊「FINISH」。
等待應用程序完成暫存。
- 顯示消息「Your app is running」後,單擊 Overview 頁面。
- 單擊「ADD A SERVICE OR API」,或者若是已建立了 MySQL 服務,單擊「BIND A SERVICE OR API」。
- 搜索「MySQL」或向下滾動到 Data & Analytics 服務。
- 找到並選擇「ClearDB MySQL Database」服務。
- 接受默認設置或重命名該服務,按「USE」並確認「從新暫存」應用程序。
在建立服務後,在應用程序細節頁面的左側菜單中,轉到「Environmental Variables」來查看 MySQL 服務憑據。或者轉到 Overview 頁,在 service 窗口中單擊「Show Credentials」連接。
回頁首
配置數據源
在應用程序目錄中,打開 server/datasources.json 文件,添加您的數據源配置。複製 ClearDB MySQL 服務的憑據,或使用您本身的 MySQL 數據庫憑據。
{
"cleardb":[
{
"name":"MyClearDBMySQLDatabase-5y",
"label":"cleardb",
"plan":"spark",
"credentials":{
"jdbcUrl":"jdbc:mysql://<database_subdomain>.cleardb.net/<database>?user=<username>&password=<password>",
"uri":"mysql://<username>:<password>@<database_subdomain>.cleardb.net:3306/<database>?reconnect=true",
"name":"<database>",
"hostname":"<database_subdomain>.cleardb.net",
"port":"3306",
"username":"<username>",
"password":"<password>"
}
}
]
}
將憑據添加到 server/datasources.json 文件中。
{
"db":{
"name":"db",
"connector":"memory"
},
"AccountDb":{
"host":"<database_subdomain>.cleardb.net",
"port":3306,
"database":"<database>",
"password":"<password>",
"name":"AccountDb",
"user":"<username>",
"connector":"mysql"
}
}
回頁首
建立數據模型
如今數據庫已成功添加且配置了數據源,能夠開始建立數據模型了。數據模型描述您應用程序中的模式或數據對象。每一個數據對象將在 StrongLoop 中擁有本身的模型。完整的模式是模型的集合。在這裏,咱們爲 Account 對象建立了一個數據模型。
slc loopback:model Account
按照提示配置該數據模型。對於模型的「base class」,使用「PersistedModel」並選擇經過 REST API 公開該模型。添加模型屬性以下:
Name:Account
Datasource:AccountDb
Base class:PersistedModel
Expose via REST:Yes
Custom plural form:Leave blank
對於數據模型上的屬性,建立如下 3 個屬性。
Property name: email
Property type: string
Required?Not required
Property name: createdAt
Property type: date
Required?Not required
Property name: lastModifiedAt
Property type: date
Required?Not required
咱們如今已擁有數據庫支持、數據源和數據模型。有了這些,咱們就可使用對象關係映射 (ORM),使用 StrongLoop 中的自動遷移工具,在 MySQL 中從數據模型生成數據庫模式。
回頁首
添加腳原本建立數據庫中的模式
在您項目的根目錄下的 ./server 文件夾中建立一個 bin 目錄。
在 server/bin 目錄中,使用如下代碼建立一個名爲 automigrate.js 的文件。
var app = require('../server');
var accounts = [
{
email:'foo@bar.com',
createdAt: new Date(),
lastModifiedAt: new Date()
},
{
email:'baz@qux.com',
createdAt: new Date(),
lastModifiedAt: new Date()
}
];
// this loads the accountDb configuration in ~/server/datasources.json
var dataSource = app.dataSources.AccountDb;
// this automigrates the Account model
dataSource.automigrate('Account', function(err) {
if (err) throw err;
// this loads the Account model from ~/common/models/Account.json
var Account = app.models.Account;
var count = accounts.length;
accounts.forEach(function(account) {
// insert new records into the Account table
Account.create(account, function(err, record) {
if (err) return console.log(err);
console.log('Record created:', record);
count--;
if (count === 0) {
console.log('done');
dataSource.disconnect();
}
});
});
});
回頁首
建立 MySQL 模式
使用下面的命令運行 automigrate.js 腳原本在 MySQL 中建立一個表。
node server/bin/automigrate.js
運行上述腳本後,使用您最喜歡的 MySQL 客戶端鏈接到您的 MySQL 數據庫,您應看到表「account」包含 3 列:「email」、「createdAt」和「lastModifiedAt」。StrongLoop 還添加了一個「id」列。該表包含咱們在腳本中建立的兩個條目的數據,這兩個條目是用來插入數據的:
回頁首
運行該應用程序
slc run
或
node server/server.js
並瀏覽到 http://localhost:3000/explorer。StrongLoop 向您的應用程序添加了一系列兼容 Swagger 的 API,用於訪問賬戶資源:
咱們還可使用資源管理器頁面來測試每一個 API。單擊「POST /Accounts」連接插入新數據。輸入一條新 JSON 記錄並按下「Try it out!」。
{
"email":"your@email.com",
"createdAt":"2015-09-01",
"lastModifiedAt":"2015-09-01"
}
您管理賬戶的 StrongLoop 應用程序已完成!咱們只需將它上傳並部署到 Bluemix。
回頁首
將 StrongLoop 應用程序部署到 Bluemix
- 轉到 Bluemix 儀表板並單擊(您以前建立的)項目。
- 單擊 start coding。
- 將 Bluemix 中的 Starter 應用程序的代碼下載到您的 localhost,或者將 Git 存儲庫克隆到您的 localhost。
- 將 Bluemix Starter 應用程序的 manifest.yml 文件複製到您的本地 StrongLoop 應用程序「<alias>-loopback-example」的根目錄下。此文件包含 Cloud Foundry 用來將 Node.js 應用程序部署到 Bluemix 的信息。
- 將隱藏的 .cfignore 文件複製到您的本地 StrongLoop 應用程序「<alias>-loopback-example」的根目錄下。
- 修改本地 StrongLoop 的「package.json」文件來添加「cfenv」依賴項,並更改啓動腳本參數(參見下面的代碼段)
- 修改本地 StrongLoop 應用程序的 server/server.js 文件,使之包含 cfenv 要讀取的主機和端口。Bluemix 以環境變量形式提供這些參數。在下面的代碼段中,我修改了 StrongLoop 生成的 server.js 來反映這些更改。
- 從您的本地 StrongLoop 應用程序的根目錄刪除 node_modules 文件夾。
package.json 的代碼段:
"scripts":{
"start":"node server/server.js",
"pretest":"jshint ."
},
"dependencies":{
..
"cfenv":"1.0.x"
..
server/server.js 的代碼段:
var loopback = require('loopback');
var boot = require('loopback-boot');
// cfenv provides access to your Cloud Foundry environment
// for more info, see: https://www.npmjs.com/package/cfenv
var cfenv = require('cfenv');
// get the app environment from Cloud Foundry
var appEnv = cfenv.getAppEnv();
var app = module.exports = loopback();
app.start = function() {
// start the web server
return app.listen(appEnv.port, appEnv.bind, function() {
app.emit('started');
console.log('Web server listening at:%s', app.get('url'));
});
};
// Bootstrap the application, configure models, datasources and middleware.
// Sub-apps like REST API are mounted via boot scripts.
boot(app, __dirname, function(err) {
if (err) throw err;
// start the server if `$ node server.js`
if (require.main === module)
app.start();
});
鏈接並登陸到 Bluemix:
cf api https://api.ng.bluemix.net
cf login -u <alias> -o <organization> -s <space>
使用 cf push 命令將您的應用程序推送到 Bluemix:
cf push <alias>-loopback-example
cf push 應在 Bluemix 上啓動一次 git 提交、git 推送,構建和部署。檢查您的 Bluemix 儀表板或 JazzHub 「Build & Deploy」 頁面,確認您的應用程序如今已成功在 Bluemix 上運行!
http://www.ibm.com/developerworks/cn/cloud/blogs/strongloop-to-mysql-app/index.html
Node.js LoopBack 框架和 IBM Cloudant 入門
Node.js 是一個快速構建高性能的、可擴展的後端系統的優秀工具,它是使用大多數前端開發人員都已熟悉的核心語言 JavaScript 開發的。Node.js 正積極地進軍企業領域,許多重要企業正在 Node.js 基礎架構之上構建他們完整的 Web 系統和 API 服務。
StrongLoop 的 LoopBack 框架使您可以輕鬆地鏈接數據並將數據公開爲 REST 服務。它可以在圖形(或命令行)界面中以可視方式建立數據模型,可使用這些模型自動生成 REST API - 從而爲您的 REST 服務層生成 CRUD 操做,無需編寫任何代碼。
爲何這很重要?它使 API 開發變得更容易,並顯著減小了從概念到實現所需的時間。觀看下面的視頻,瞭解它能爲您作什麼。
IBM Cloudant 是 IBM 的 NoSQL 數據庫即服務,它提供了大規模可伸縮性、強大的搜索特性、高可用性,能夠幫助您更快交付解決方案,下降維護成本。
儘管對 StrongLoop 的收購仍只是「熱門新聞」,但您如今能夠結合使用 LoopBack 和 Cloudant 來加速高度安全的 REST 應用層的開發。將這一點與 IBM MobileFirst 平臺相結合,您將擁有一個更全面、更安全的移動應用程序解決方案。事實上,StrongLoop/LoopBack 和 Cloudant 如今都是 MobileFirst Platform 的一部分,但您仍可以以獨立服務的形式在 IBM Bluemix 上獲取它們。
在本文中,咱們將介紹如何藉助 LoopBack 框架和 Strongloop Arc 工具,利用 IBM Cloudant 做爲後端數據存儲。
在 LoopBack 框架中,是經過所謂的「數據鏈接器」來獲取和持久化數據。StrongLoop 維護着多個數據鏈接器,擁有針對開發人員社區所提供的更多後端數據存儲的鏈接器。
Cloudant 是一個 DBaaS 服務,是一個衍生的 Apache CouchDB,因此將 LoopBack 鏈接器鏈接到 Cloudant 很簡單,只需在您應用程序中使用現有的社區驅動的 CouchDB LoopBack Connector。咱們來了解一下如何爲您本身的應用程序執行此設置。
設置 IBM Cloudant
設置 Cloudant 很簡單。MobileFirst Platform Foundation Server 提供了 Cloudant 的一個有限的內部部署許可,或者您能夠將 Cloudant 服務添加到 Bluemix 上的任何應用程序:您能夠經過 REST 接口單獨使用 Cloudant,或者使用 Node.js/Cloudant Web Starter 模板來得到 Node.js + Cloudant 多層解決方案。
咱們來了解一下如何使用 Bluemix Starter 模板設置 Cloudant。在瀏覽器中導航到 Node.js/Cloudant Web Starter 模板,而後輸入一個應用程序名稱和應用程序主機(此信息將用在應用程序的 URL 前綴中),而後點擊「Create」按鈕。
圖 1.Node.js Cloudant Starter模板
點擊「Create」按鈕會建立一個 Cloudant NoSQL 數據庫實例以及 Bluemix 上的一個 Node.js 服務實例,咱們之後能夠將應用程序部署到該實例上。在您的應用程序正常運行後,會顯示一條消息。
您的服務在 Bluemix 上正常運行後,您將可以直接使用 Cloud Foundry 命令行工具部署 Node.js 應用程序,使用 IBM Devops Services 或Bluemix Live Sync & GIT 進行部署,或者使用 Eclipse Tools for Bluemix。
接下來,咱們須要建立咱們的 Cloudant 數據庫實例,以便將它用於咱們的 Node.js/LoopBack 應用程序。在您的 Bluemix 儀表板中,單擊「Cloudant NoSQL DB」服務連接來查看細節,而後單擊右上角的「Launch」按鈕來查看 Cloudant 儀表板。
進入 Cloudant 儀表板中後,您須要建立一個用於該應用程序的數據庫實例。選擇右上角的「Add New Database」連接。系統會提示您輸入一個數據庫名稱,而後點擊「Create」。
圖 2.建立一個新 Cloudant 數據庫
建立數據庫後,就能夠設置您的本地開發環境並開始構建應用程序了。
回頁首
本地開發環境
若是尚未安裝如下工具,須要下載並安裝它們:
- Node.js - 轉到 nodejs.org,按照說明安裝 Node.js。
- LoopBack - 接下來轉到 loopback.io,按照說明下載 LoopBack API 框架。您可能還但願查閱入門指南和文檔,瞭解有關的更多信息。
- Cloud Foundry CLI - Cloud Foundry 命令行界面用於手動將您的應用程序部署到 Bluemix。按照這些說明將 CF CLI 安裝在您的本地機器上。
回頁首
設置 Node.js/LoopBack App
在安裝了您環境所需的軟件後,如今能夠開始建立您的 API 應用程序了。
咱們須要作的第一件事是從命令行終端使用 LoopBack 應用程序生成器設置應用程序。您須要指定應用程序名稱和將建立該應用程序的子目錄。
_-----_
| | .--------------------------.
|--(o)--| | Let's create a LoopBack |
`---------?′ | application! |
( _?′U`_ ) '--------------------------'
/___A___\
| ~ |
__'.___.'__
?′ ` |?° ?′ Y `
?What's the name of your application? business-directory
?Enter name of the directory to contain the project: business-directory
建立應用程序後,下一步是建立鏈接器,使 LoopBack 框架可以將數據存儲在 Cloudant 數據庫中。由於 Cloudant 是 CouchDB 的衍生產品,因此咱們將使用 Community Connectors 下的 Apache CouchDB LoopBack 鏈接器。
在終端窗口中,使用 cd 命令進入剛生成的項目目錄中,而後使用 npm 安裝 loopback-couch-connector。
$ cd business-directory
$ npm install loopback-connector-couch
安裝鏈接器後,須要將 Cloudant 配置爲可用於 LoopBack 框架的數據源。能夠經過編程方式完成此設置,以便從環境配置中提取憑據。可是,爲了簡便起見,我將展現該配置以及 datasource.json 配置文件中的憑據。
使用 JavaScript/text 編輯器打開 server/datasources.json 文件,添加「cloudant」,以下所示。您須要指定您的 Cloudant 主機 URL,以及訪問數據庫所需的身份驗證憑據。
{
"db":{
"name":"db",
"connector":"memory"
},
"cloudant":{
"host":"your-database-host-bluemix.cloudant.com",
"port":443,
"name":"cloudant",
"connector":"couch",
"db":"business-directory",
"protocol":"https",
"auth":{
"admin":{
"username":"your Cloudant admin user name",
"password":"your admin password"
},
"reader":{
"username":"your reader user name",
"password":"your reader password"
},
"writer":{
"username":"your writer username",
"password":"your writer password"
}
}
}
}
您能夠查看 GitHub 上的 LoopBack CouchDB Connector 項目,瞭解更多的配置和使用信息。
LoopBack 框架擁有兩種構建數據模型的方式:命令行界面和 Arc Composer,後者是一種構建數據模型和 API 的圖形界面。
首先,咱們將使用命令行工具設置一個數據模型。使用 slc loopback:model 生成器,執行如下步驟,在數據模型中建立一個「Company」條目。
$ slc loopback:model
?Enter the model name:Company
?Select the data-source to attach Company to: cloudant (couch)
?Select model's base class:PersistedModel
?Expose Company via the REST API?Yes
?Custom plural form (used to build REST URL):Companies
Let's add some Company properties now.
Enter an empty property name when done.
?Property name: name
?Property type: string
?Required?Yes
Let's add another Company property.
Enter an empty property name when done.
?Property name: address
?Property type: string
?Required?Yes
Let's add another Company property.
Enter an empty property name when done.
?Property name: city
?Property type: string
?Required?Yes
Let's add another Company property.
Enter an empty property name when done.
?Property name: state
?Property type: string
?Required?Yes
Let's add another Company property.
Enter an empty property name when done.
?Property name: zip
?Property type: string
?Required?Yes
這將生成數據模型的 Company.json 配置和 Company.js 類,您可以擴展該類來添加本身的自定義邏輯。
Company.json:
{
"name":"Company",
"plural":"Companies",
"base":"PersistedModel",
"idInjection": true,
"options":{
"validateUpsert": true
},
"properties":{
"name":{
"type":"string",
"required": true
},
"address":{
"type":"string",
"required": true
},
"city":{
"type":"string",
"required": true
},
"state":{
"type":"string",
"required": true
},
"zip":{
"type":"string",
"required": true
}
},
"validations":[],
"relations":{},
"acls":[],
"methods":{}
}
Company.js:
module.exports = function(Company) {
//add your custom extension logic here
};
接下來,使用 Arc Composer 界面在咱們的數據模型中建立更多的類。從終端窗口運行下面這個命令:
這將啓動 StrongLoop Arc 圖形界面來與 LoopBack API/應用程序交互,而後爲本地服務打開一個瀏覽器窗口。瀏覽器窗口打開後,單擊「Composer」圖標進入 GUI 來管理您的數據模型。
圖3
在 Composer 界面中,單擊「Add New Model」連接開始構建下一個類。輸入一個模型名稱「Employee」和複數形式「Employees」,而後確保選中了「PersistedModel」做爲基礎模型,並選擇「cloudant」做爲數據源。
接下來,將如下 3 個屬性添加到 Employee 模型中:
- name, string, required
- title, string, required
- company, string, required
保存模型後,將會生成兩個 JavaScript 文件:Employee.json 和 Employee.js。就像從命令行建立的 Company 模型同樣(上文),這兩個文件表示數據模型定義,以及一個可用來擴展模型來添加本身的自定義邏輯或行爲的類。
Employee.json:
{
"name":"Employee",
"base":"PersistedModel",
"strict": false,
"idInjection": false,
"options":{
"validateUpsert": true
},
"properties":{
"name":{
"type":"string",
"required": true
},
"title":{
"type":"string",
"required": true
},
"companyId":{
"type":"number",
"required": true
}
},
"validations":[],
"relations":{},
"acls":[],
"methods":[]
}
Employee.js:
module.exports = function(Employee) {
//add your custom extension logic here
};
如今咱們已經建立了兩個數據對象定義,接下來要在兩個對象之間定義一種關係。在命令行上,使用「slc loopback:relation」生成器命令建立一種關係。
slc loopback:relation
?Select the model to create the relationship from:Company
?Relation type: has many
?Choose a model to create a relationship with:Employee
?Enter the property name for the relation: employees
?Optionally enter a custom foreign key: company
?Require a through model?No
如今咱們已經定義了數據並定義了一種關係,接下來開始與從數據模型自動生成的 REST API 交互。
若是您想知道這些關係的工做原理,由於咱們沒有在模型中定義 id 值,因此這些 id 屬性會自動生成。
回頁首
與數據/服務交互
LoopBack 框架自動爲您數據模型中的全部對象生成 REST 端點。它還會自動生成 Swagger API 文檔。這將爲您項目生成的全部服務提供一個簡單易用的界面。咱們如今來看一下生成的文檔……
在瀏覽器中返回到 Arc Composer 界面,單擊「App Controller」按鈕(右上角的三角形「play」按鈕)並啓動您的應用程序。運行您的應用程序後,在一個新瀏覽器窗口中打開 API 文檔:http://localhost:3000/explorer/(使用默認的本地配置)。
圖 4.自動生成的 Swagger 交互式文檔
從生成的文檔中,您能夠看到全部已公開的與數據模型交互的 REST 方法。在這裏,您還能夠直接與這些服務交互和測試它們。單擊「Get /Companies」條目展開服務細節。使用「Try it out!」按鈕調用此服務。可是,您須要先使用「POST /Companies」方法插入一些數據,而後才能查詢它。
您能夠轉到「POST /Companies」服務來插入一條包含如下數據的新記錄:
{
"name":"IBM",
"address":"1 New Orchard Road",
"city":"Armonk",
"state":"NY",
"zip":"10504"
}
這個服務可直接使用 REST 請求進行調用。
如今,咱們查詢該數據,確保它已插入到數據庫中。從命令行終端,輸入下面的命令來查看 /Companies 查詢的輸出:
$ curl http://localhost:3000/api/Companies
您會看到與下面的結果相似的查詢結果,除了 id 和 _rev 值會有所不一樣。
[{"name":"IBM","address":"1 New Orchard Road","city":"Armonk","state":"NY",
"zip":"10504","id":"a5bee38b6ce94b163de664fd5b7bc9f0","_rev":"1-646f0565f4abc14a3bc6876e05f23ef0"}]
接下來,使用「POST /Companies/{id}/employees」方法添加一些員工。您可使用資源管理器來提交數據,或者直接向 REST 服務提交數據。在本例中,我直接使用 curl 向 API 插入數據,但我將「{id}」替換成了數據庫實際生成的公司 ID。
$ curl -H "Content-Type: application/json" -X POST -d
'[{ "name":"Andrew Trice","title":"Developer Advocate"},
{ "name":"Ray Camden","title":"Developer Advocate"},
{ "name":"Marek Sadowski","title":"Developer Advocate"},
{ "name":"Kevin Hoyt","title":"Developer Advocate"},
{ "name":"Ken Parmelee","title":"Program Director"}]'
http://localhost:3000/api/Companies/a5bee38b6ce94b163de664fd5b7bc9f0/employees
這些服務可用做 RESTful 端點,也可由任何應用程序使用,不管是移動應用程序、桌面應用程序,仍是基於 Web 的應用程序。
回頁首
查詢和過濾數據
您能夠調用 GET /Companies 來查詢全部公司,調用 GET /Employees 來查詢全部員工,或者調用 /Companies/{id}/employees 來查詢某個特定公司的全部員工,但 99.99% 的時間您都不但願這麼作 - 它太通常化了,會返回太多數據,並且在邏輯或區分化的結構中沒有必要。
因此讓咱們使用 LoopBack 框架的過濾器來縮小搜索結果範圍。LoopBack 框架支持使用 [where] 過濾器來縮小返回的記錄範圍,使用 [limit] 過濾器限制返回的結果數量,使用 [fields] 過濾器限制返回的一個對象的屬性,使用 [order] 肯定結果順序,使用 [include] 過濾器包含相關模型,並使用 [skip] 過濾器跳過結果(用於數據分頁)。全部這些均可做爲 REST 請求的參數來指定。
咱們看看一些例子。
首先,返回全部頭銜爲「Developer Advocate」的員工:
$ curl -g 'http://localhost:3000/api/employees?filter[where][title]=Developer%20Advocate'
[{"name":"Andrew Trice","title":"Developer Advocate","company":"a5bee38b6ce94b163de664fd5b7bc9f0",
"id":"31c71d93e2ff40c1f789e4d46cd7f2a0","_rev":"1-582ef49e3963af0f0ab6f4d97f1038c6"},
{"name":"Marek Sadowski","title":"Developer Advocate","company":"a5bee38b6ce94b163de664fd5b7bc9f0",
"id":"63d7631797106ddfafcae31d2bc70ced","_rev":"1-0967f7cb1b26f9ee619e8c76e3e08e74"},
{"name":"Kevin Hoyt","title":"Developer Advocate","company":"a5bee38b6ce94b163de664fd5b7bc9f0",
"id":"732ad7d6c368579caea6aa7caea89e4b","_rev":"1-8e220575e11c3973a2b6a3bca02658d5"},
{"name":"Ray Camden","title":"Developer Advocate","company":"a5bee38b6ce94b163de664fd5b7bc9f0",
"id":"8436dee94003f63667657b2a78b2170c","_rev":"1-c0d797c65fec2e2e2cc3497a589ef2f2"}]
可是,這些數據對我當前的需求而言太多了。讓咱們僅返回同一個結果集中的 name 字段:
$curl -g 'http://localhost:3000/api/employees?filter[fields][name]=true
&filter[where][title]=Developer%20Advocate'
[{"name":"Andrew Trice"},
{"name":"Marek Sadowski"},
{"name":"Kevin Hoyt"},
{"name":"Ray Camden"}]
如今,想一想您可能但願進一步限制返回的記錄數量:
$ curl -g 'http://localhost:3000/api/employees?filter[fields][name]=true
&filter[where][title]=Developer%20Advocate&filter[limit]=3'
[{"name":"Andrew Trice"},
{"name":"Marek Sadowski"},
{"name":"Kevin Hoyt"}]
若是您但願以不一樣順序排列這些結果,該怎麼辦?咱們可添加過濾器來提供按名稱的升序從新排列後的前 3 個結果:
curl -g 'http://localhost:3000/api/employees?filter[fields][name]=true
&filter[where][title]=Developer%20Advocate&filter[limit]=3&filter[order]=name%20DESC'
[{"name":"Ray Camden"},
{"name":"Marek Sadowski"},
{"name":"Kevin Hoyt"}]
回頁首
更新數據
能夠向 API/id 發送 PUT 請求來輕鬆地更新數據。因此,若是您但願更新一位員工,能夠向 /employees/{id} 發送一個僅包含您想要更新的值的 PUT 請求。
咱們假設我想更新個人員工條目中的名稱……在本例中,我僅將包含「name」屬性的新值的 PUT 請求發送給 /Employees/{id}:
$ curl -H "Content-Type: application/json" -X PUT -g -d '{"name":"Andy Trice"}'
'http://localhost:3000/api/Employees/31c71d93e2ff40c1f789e4d46cd7f2a0'
{"name":"Andy Trice","title":"Developer Advocate","company":"a5bee38b6ce94b163de664fd5b7bc9f0",
"id":"31c71d93e2ff40c1f789e4d46cd7f2a0","_rev":"6-88e83684b52cde686c08a84555e36d34"}
回頁首
遷移到雲
目前爲止,咱們已在本地開發機器上測試了全部代碼。若是您管理着本身的 Node.js 服務器,那麼能夠簡單地將您的代碼部署到生產環境。
咱們還能夠經過多種選擇將此應用程序遷移到雲中。首先讓咱們來看看 Node.js 即時運行時,它包含在本文以前使用的 Cloudant 應用程序模板中。咱們還能夠選擇將此 API 部署到在 Bluemix 上一個容器中運行的 StrongLoop Process Manager。
Node.js 即時運行時
由於在本文開頭咱們在 Bluemix 上建立了一個應用程序,因此咱們繼續將它部署到該 Bluemix 即時運行時。
咱們將使用 Cloud Foundry 命令行 API 將 Node.js 應用程序部署到 Bluemix,但須要先對 package.json 文件進行一些細微更改。在代碼編輯器中打開 package.json 後,添加「dependencies」和「bundle dependencies」,以下面的示例 package.json 所示:
{
"name":"business-directory",
"version":"1.0.0",
"main":"server/server.js",
"scripts":{
"pretest":"jshint ."
},
"dependencies":{
"compression":"^1.0.3",
"cors":"^2.5.2",
"errorhandler":"^1.1.1",
"loopback":"^2.14.0",
"loopback-boot":"^2.6.5",
"loopback-datasource-juggler":"^2.19.0",
"serve-favicon":"^2.0.1",
"loopback-connector-couch":"*",
"cfenv":"1.0.x"
},
"optionalDependencies":{
"loopback-explorer":"^1.1.0"
},
"devDependencies":{
"jshint":"^2.5.6"
},
"repository":{
"type":"",
"url":""
},
"description":"business-directory",
"bundleDependencies":[
"compression",
"cors",
"errorhandler",
"loopback",
"loopback-boot",
"loopback-connector-couch",
"loopback-datasource-juggler",
"loopback-explorer",
"serve-favicon"
]
}
接下來,咱們須要在終端窗口中使用 CF CLI 登陸:
按照提示登陸到 Bluemix。
接下來,使用「cf push {app name}」將應用程序部署到 Bluemix。請注意「-c」選項,它會告訴節點從哪一個命令開始。須要指定此選項是由於,它與默認的 Bluemix Node.js 應用程序配置稍微不一樣:
$ cf push LoopBack-Directory -c "node server/server.js"
將應用程序部署到 Bluemix 後,您會看到一個相似下文的摘要:
requested state: started
instances:1/1
usage:512M x 1 instances
urls: loopback-directory.mybluemix.net
last uploaded:Wed Aug 26 03:48:50 UTC 2015
stack: lucid64
buildpack:SDK for Node.js(TM) (ibm-node.js-0.12.7)
state since cpu memory disk details
#0 running 2015-08-25 11:50:29 PM 0.1% 120.5M of 512M 119.8M of 1G
在將應用程序部署到 Bluemix 後,就能夠將 API 服務用在您的應用程序中。您能夠自行查看 API 資源管理器和 API 端點:loopback-directory.mybluemix.net/explorer
備註:我限制了寫入訪問,因此您只能讀取數據。
回頁首
StrongLoop Process Manager
將 LoopBack 應用程序部署到生產中的第二個選擇是,使用 Bluemix 上的 StrongLoop Process Manager 容器。首先,導航到 Bluemix Catalog 並選擇「ibm-node-strong-pm」鏡像。
在得到提示時,輸入一個容器名稱,而後確保請求並綁定了一個公共 IP,而後選擇應用程序要使用的端口。您須要使用端口 8701(由 Process Manager 使用),您的應用程序運行時默認狀況下使用的端口爲 3001,但您能夠在 server/config.json 文件中配置您應用程序的端口。
圖 5.StrongLoop Process Manager 容器建立
確保請求的容器端口與 config.json 中應用程序使用的端口匹配,不然您沒法訪問部署後的應用程序。這多是像 HTTP 端口 80 這樣的標準端口,或者是像默認的 3001 這樣的一次性端口,後者通常用於開發。
在建立容器後,您就可以使用本地機器上的 StrongLoop Process Manager 工具將應用程序部署到 Bluemix 上的遠程實例。
若是瀏覽器中仍打開着 StrongLoop Arc/Composer 工具,如今轉到該工具。若是沒有運行它,能夠轉到命令行終端,並從您應用程序的目錄運行「slc arc」。
$ cd business-directory
$ slc arc
Arc 工具會自動在瀏覽器中啓動。接下來,咱們須要爲咱們的遠程容器設置一個 PM 主機。轉到「Process Manager」視圖,選擇「Add PM Host」選項來按 IP 地址和端口添加新建立的容器。
圖 6.添加新 PM 主機
您能夠在 Bluemix 儀表板中查看您的容器鏡像來得到該 IP 地址和驗證綁定的端口。
圖 7.新建的 Docker Container 信息
接下來,轉到 Arc 工具中的 Build & Deploy 模塊。從這裏選擇或構建一個您想要部署的歸檔文件,而後選擇您想要將應用程序部署到哪一個主機。點擊「Deploy」按鈕後,就會部署該應用程序。
圖 8.使用 StrongLoop Arc 進行構建和部署
部署您的應用程序後,便可在指定的 IP 和端口上使用它。若是沒法直接點擊您的應用程序,您可能須要跳回到 Process Manager 模塊來確保它的實例在正常運行。
回頁首
後續步驟
在將您應用程序的 API 應用到生產中後,您能夠在任何可以使用 REST 服務的應用程序中使用它,不管是移動應用程序、桌面應用程序,仍是基於 Web 的應用程序。
LoopBack 和 IBM MobileFirst
我在上面已提到,您已經可以利用 IBM MobileFirst 將 LoopBack 框架生成的 API 與應用程序集成。請查閱「使用LoopBack 構建的IBM MobileFirst 和Node.js API 入門」,更詳細地瞭解如何配置 MobileFirst Platform Foundation 服務器和 LoopBack/Node.js 應用程序,讓 MobileFirst 可以管理身份驗證和對 Node.js API 的訪問,並捕獲將在 MobileFirst Analytics 控制檯中報告的分析信息。
http://www.ibm.com/developerworks/cn/cloud/blogs/getting-started-node-js-loopback-framework-ibm-cloudant/index.html