一、安裝
安裝LoopBack工具來創(chuàng)建和開發(fā)LoopBack 3.0應(yīng)用程序笑撞。
安裝Node.js
安裝loopback工具
雖然你可以自己從頭開始編寫一個(gè)LoopBack應(yīng)用程序,但是安裝一個(gè)LoopBack CLI工具能夠使它更容易入門骂删。它將構(gòu)建應(yīng)用程序的基本結(jié)構(gòu)赞草,然后您可以根據(jù)需要進(jìn)行自定義。
LoopBack提供了兩個(gè)工具的選項(xiàng):LoopBack CLI 和 IBM API Connect開發(fā)工具包祭刚,這里可以選擇LoopBack CLI來進(jìn)行應(yīng)用程序的構(gòu)建。
安裝Loopback CLI工具
npm install -g loopback-cli
這一步將安裝 lb
命令行工具墙牌,用于構(gòu)建和修改LoopBack應(yīng)用程序涡驮。
安裝更新
如果之前安裝過strongloop,需要進(jìn)行一次版本的更新:
npm install -g strongloop
如果遇到任何問題喜滨,可以嘗試卸載重裝:
npm uninstall -g strongloop
npm cache clear
npm install -g strongloop
二遮怜、使用Loopback創(chuàng)建一個(gè)應(yīng)用
創(chuàng)建一個(gè)簡單的API
首先使用loopback-cli創(chuàng)建一個(gè)新的應(yīng)用:
lb
LoopBack應(yīng)用生成器將提示您輸入應(yīng)用程序的名稱。
_-----_
| | .--------------------------.
|--(o)--| | Let's create a LoopBack |
`---------′ | application! |
( _′U`_ ) '--------------------------'
/___A___\
| ~ |
__'.___.'__
′ ` |° ′ Y `
[?] What's the name of your application? loopback-getting-started
[?] Enter name of the directory to contain the project: loopback-getting-started
這里可以替換成任何你喜歡的名字鸿市,本教程使用了官方文檔中的名稱:loopback-getting-started锯梁。
接下來cli工具會(huì)詢問要?jiǎng)?chuàng)建什么樣的應(yīng)用程序:可以選擇 hello-world
。
? What kind of application do you have in mind? (Use arrow keys)
api-server (A LoopBack API server with local User auth)
empty-server (An empty LoopBack API, without any configured models or datasources)
? hello-world (A project containing a controller, including a single vanilla Message and
a single remote method)
notes (A project containing a basic working example, including a memory database)
然后焰情,生成器將在其構(gòu)建應(yīng)用程序時(shí)創(chuàng)建如下信息陌凳,包括:
- 初始化項(xiàng)目的文件夾結(jié)構(gòu)。
- 創(chuàng)建默認(rèn)的JSON文件内舟。
- 創(chuàng)建默認(rèn)的JavaScript文件合敦。
- 下載并安裝依賴節(jié)點(diǎn)模塊(省去手動(dòng)安裝npm的一步)。
創(chuàng)建一個(gè)數(shù)據(jù)模型
完成了初始項(xiàng)目的構(gòu)建验游,接下來我們將創(chuàng)建一個(gè)自動(dòng)具有REST API接口的CoffeeShop模型充岛。
進(jìn)入應(yīng)用程序目錄,然后運(yùn)行LoopBack模型生成器:
lb model
生成器將提示輸入數(shù)據(jù)模型的名稱耕蝉,輸入CoffeeShop:
[?] Enter the model name: CoffeeShop
它會(huì)詢問您是否要將模型附加到已經(jīng)一些已經(jīng)定義的數(shù)據(jù)源崔梗。 此時(shí),只有默認(rèn)的內(nèi)存數(shù)據(jù)源可用垒在。按Enter鍵選擇它:
...
[?] Select the data-source to attach CoffeeShop to: (Use arrow keys)
? db (memory)
然后蒜魄,生成器將提示您使用基類作為模型。由于您在最終會(huì)把該模型連接到數(shù)據(jù)庫中的持久數(shù)據(jù)源,所以這里選擇PersistedModel:
[?] Select model's base class: (Use arrow keys)
Model
? PersistedModel
ACL
AccessToken
Application
Change
Checkpoint
PersistedModel是連接到持久性數(shù)據(jù)源(如數(shù)據(jù)庫)的所有模型的基礎(chǔ)對(duì)象谈为,也就是基類旅挤。
關(guān)于Loopback中的模型:
模型是LoopBack的核心,表示如數(shù)據(jù)庫或其他后端服務(wù)(REST伞鲫,SOAP等)等后端數(shù)據(jù)源粘茄。 LoopBack模型是具有Node和REST API的JavaScript對(duì)象。
LoopBack的一個(gè)關(guān)鍵功能是當(dāng)您定義一個(gè)模型時(shí)秕脓,它將自動(dòng)附帶預(yù)定義的REST API驹闰,并具有完整的創(chuàng)建,讀取撒会,更新和刪除操作。
Basic模型對(duì)象具有添加鉤子和驗(yàn)證數(shù)據(jù)的方法师妙。其他模型對(duì)象都“繼承”它诵肛。模型具有繼承層次結(jié)構(gòu),如下圖所示:將模型附加到持久性數(shù)據(jù)源時(shí)默穴,它將成為具有創(chuàng)建怔檩,檢索,更新和刪除操作的連接模型蓄诽。 LoopBack的內(nèi)置模型繼承自它薛训。
LoopBack的強(qiáng)大優(yōu)點(diǎn)之一是它自動(dòng)為您的模型生成REST API。生成器將詢問您是否要公開此REST API仑氛。
再次輸入Enter接受默認(rèn)值乙埃,并通過REST暴露CoffeeShop模型:
[?] Expose CoffeeShop via the REST API? (Y/n) Y
LoopBack使用模型名稱的復(fù)數(shù)自動(dòng)創(chuàng)建與模型關(guān)聯(lián)的REST路由。默認(rèn)情況下锯岖,它將您的名稱復(fù)數(shù)(通過添加“s”)介袜,但是如果需要,您可以指定自定義復(fù)數(shù)形式出吹。
按Enter接受默認(rèn)復(fù)數(shù)形式(CoffeeShops):
[?] Custom plural form (used to build REST URL):
接下來遇伞,系統(tǒng)會(huì)詢問您是要僅在服務(wù)器上創(chuàng)建模型,還是在/common
目錄中創(chuàng)建模型捶牢,這些模型可能由服務(wù)器端口和客戶端LoopBack API使用鸠珠。選擇common,即使在這個(gè)應(yīng)用程序中秋麸,你只使用服務(wù)器端模型:
? Common model or server only?
? common
server
每個(gè)模型都有屬性〗ヅ牛現(xiàn)在,您將為CoffeeShop模型定義一個(gè)屬性“name”灸蟆。
選擇字符串作為屬性類型:
Let's add some CoffeeShop properties now.
Enter an empty property name when done.
[?] Property name: name
invoke loopback:property
[?] Property type: (Use arrow keys)
? string
number
boolean
object
array
date
buffer
geopoint
(other)
每個(gè)屬性可以是可選的或必需的飞盆。輸入 y
以將 name
設(shè)為必需:
[?] Required? (y/N)
然后系統(tǒng)會(huì)提示您輸入屬性的默認(rèn)值;按Enter鍵不設(shè)默認(rèn)值:
? Default value[leave blank for none]:
然后,系統(tǒng)會(huì)提示您添加其他屬性。按照提示添加名為“city”的必需屬性吓歇。
Let's add another CoffeeShop property.
? Property name: city
? Property type: string
? Required? Yes
? Default value[leave blank for none]:
當(dāng)提示輸入下一個(gè)屬性的名稱時(shí)孽水,按Enter鍵結(jié)束模型創(chuàng)建過程。
模型生成器將在應(yīng)用程序的 common / models
目錄中創(chuàng)建兩個(gè)定義模型的文件: coffee-shop.json
和 coffee-shop.js
城看。
LoopBack模型生成器自動(dòng)將駝峰式的模型名稱(例如MyModel)轉(zhuǎn)換為小寫字母名稱(my-model)女气。例如,如果您使用模型生成器創(chuàng)建一個(gè)名為“FooBar”的模型测柠,它將在
common/models
中創(chuàng)建foo-bar.json
和foo-bar.js
文件炼鞠。但是,模型名稱(“FooBar”)將通過模型的名稱屬性進(jìn)行保留轰胁。
運(yùn)行應(yīng)用程序
$ node .
...
Browse your REST API at http://0.0.0.0:3000/explorer
Web server listening at: http://0.0.0.0:3000/
現(xiàn)在打開你的瀏覽器到http://0.0.0.0:3000/explorer 或http://localhost:3000/explorer 谒主。您將看到StrongLoop API資源管理器:
通過使用LoopBack的一系列簡單的步驟,您創(chuàng)建了一個(gè)CoffeeShop模型并為它設(shè)置了一些屬性赃阀,然后通過REST進(jìn)行公開霎肯。
三、使用API??資源管理器
運(yùn)行API??資源管理器
運(yùn)行應(yīng)用: node .
轉(zhuǎn)到 http://localhost:3000/explorer榛斯。您將看到StrongLoop API資源管理器中顯示了該應(yīng)用程序的兩個(gè)模型:User和CoffeeShop:
探索CoffeeShop模型
除了CoffeeShop模型之外观游,Loopback還會(huì)為每個(gè)應(yīng)用程序生成默認(rèn)的用戶模型及其接口。
展開CoffeeShops之后驮俗,可以看到它所有的API接口懂缕。
大致瀏覽這些API接口:您可以看到它們涵蓋了所有的創(chuàng)建,讀取王凑,更新和刪除(CRUD)等操作搪柑。你可以去post一條數(shù)據(jù)來試試看。
四索烹、將API連接到數(shù)據(jù)源
添加一個(gè)數(shù)據(jù)源
現(xiàn)在拌屏,您將使用數(shù)據(jù)源生成器定義數(shù)據(jù)源:
$ lb datasource
生成器將提示您命名數(shù)據(jù)源:
[?] Enter the data-source name:
接下來,生成器將提示您輸入數(shù)據(jù)源的類型术荤,這里以mySql為例:
? Select the connector for mysqlDs: (Use arrow keys)
? In-memory db (supported by StrongLoop)
IBM DB2 (supported by StrongLoop)
IBM DashDB (supported by StrongLoop)
IBM MQ Light (supported by StrongLoop)
IBM Cloudant DB (supported by StrongLoop)
IBM DB2 for z/OS (supported by StrongLoop)
MongoDB (supported by StrongLoop)
(Move up and down to reveal more choices)
然后該工具將提示您輸入數(shù)據(jù)源配置倚喂,對(duì)于MySQL,您可以以URL格式或單獨(dú)輸入所有設(shè)置瓣戚。
Connector-specific configuration:
? Connection String url to override other settings (eg: mysql://user:pass@host/db):
按回車鍵跳過端圈。
提示:盡量使用自己的MySQL數(shù)據(jù)庫服務(wù)器,并創(chuàng)建一個(gè)名為“getting_started”的新數(shù)據(jù)庫子库,數(shù)據(jù)庫名稱可以自己定義舱权,但是請(qǐng)確保datasources.json中的mysqlDs.database屬性與之匹配。
如果沒有仑嗅,您可以使用在demo.strongloop.com上運(yùn)行的StrongLoop MySQL服務(wù)器宴倍。但它是一個(gè)共享資源张症,兩個(gè)用戶可能會(huì)同時(shí)運(yùn)行創(chuàng)建樣本數(shù)據(jù)的腳本,這可能會(huì)引發(fā)沖突鸵贬。因此俗他,我們建議您使用自己的MySQL服務(wù)器。
如果使用StrongLoop MySQL服務(wù)器阔逼,請(qǐng)輸入如下所示的設(shè)置兆衅。如果使用您自己的MySQL服務(wù)器,請(qǐng)輸入服務(wù)器的主機(jī)名嗜浮,端口號(hào)和登錄信息羡亩。
? host: demo.strongloop.com
? port: 3306
? user: demo
? password: L00pBack
? database: getting_started
? Install loopback-connector-mysql@^2.2 Yes
當(dāng)工具提示您安裝連接器時(shí),運(yùn)行npm install loopback-connector-mysql --save
危融。該工具還將數(shù)據(jù)源定義添加到server/datasources.json
文件中畏铆,如下所示。請(qǐng)注意剛剛添加的“mysqlDs”數(shù)據(jù)源吉殃,以及名為“db”的內(nèi)存數(shù)據(jù)源辞居,默認(rèn)情況下是這樣。
/server/datasources.json
{
"db": {
"name": "db",
"connector": "memory"
},
"mysqlDs": {
"host": "demo.strongloop.com",
"port": 3306,
"url": "",
"database": "getting_started",
"password": "L00pBack",
"name": "mysqlDs",
"user": "demo",
"connector": "mysql"
}
}
將CoffeeShop模型連接到MySQL
現(xiàn)在你創(chuàng)建了一個(gè)MySQL數(shù)據(jù)源寨腔,并且有一個(gè)CoffeeShop模型,接下來需要把它們聯(lián)系起來率寡。LoopBack應(yīng)用程序使用model-config.json文件將模型鏈接到數(shù)據(jù)源迫卢。編輯/server/model-config.json
并查找CoffeeShop條目:
/server/model-config.json
...
"CoffeeShop": {
"dataSource": "db",
"public": true
}
...
把dataSource屬性從db更改為mysqlDs。使CoffeeShop模型附加到剛剛創(chuàng)建和配置的MySQL數(shù)據(jù)源:
/server/model-config.json
...
"CoffeeShop": {
"dataSource": "mysqlDs",
"public": true
}
...
添加一些測試數(shù)據(jù)
現(xiàn)在LoopBack中已經(jīng)有了一個(gè)CoffeeShop模型冶共,如何在MySQL數(shù)據(jù)庫中創(chuàng)建相應(yīng)的表乾蛤?
您可以直接嘗試執(zhí)行一些SQL語句,不過LoopBack提供了一個(gè)Node API捅僵,可以自動(dòng)執(zhí)行一個(gè)稱作auto-migration的程序家卖。
loopback-getting-started
模塊包含用于演示自動(dòng)遷移的create-sample-models.js腳本。
注意:以下自動(dòng)遷移腳本是在應(yīng)用程序初始啟動(dòng)時(shí)LoopBack執(zhí)行的引導(dǎo)腳本的示例庙楚。使用引導(dǎo)腳本進(jìn)行初始化上荡,并執(zhí)行應(yīng)用程序啟動(dòng)時(shí)執(zhí)行的任何其他邏輯。
/server/boot/create-sample-models.js
module.exports = function(app) {
app.dataSources.mysqlDs.automigrate('CoffeeShop', function(err) {
if (err) throw err;
app.models.CoffeeShop.create([{
name: 'Bel Cafe',
city: 'Vancouver'
}, {
name: 'Three Bees Coffee House',
city: 'San Mateo'
}, {
name: 'Caffe Artigiano',
city: 'Vancouver'
}, ], function(err, coffeeShops) {
if (err) throw err;
console.log('Models created: \n', coffeeShops);
});
});
};
這將保存一些測試數(shù)據(jù)到數(shù)據(jù)源馒闷。
五酪捡、擴(kuò)展API
添加遠(yuǎn)程方法
按著如下步驟:
- 查看您的應(yīng)用程序的
/common/models
目錄。你會(huì)注意到文件夾里有coffee-shop.js和coffee-shop.json這兩個(gè)文件纳账。 - 在編輯器中打開coffee-shop.js逛薇,默認(rèn)情況下,它包含一個(gè)空的函數(shù):
module.exports = function(CoffeeShop) {};
- 將以下代碼添加到此函數(shù)中:
module.exports = function(CoffeeShop) {
CoffeeShop.status = function(cb) {
var currentDate = new Date();
var currentHour = currentDate.getHours();
var OPEN_HOUR = 6;
var CLOSE_HOUR = 20;
console.log('Current hour is %d', currentHour);
var response;
if (currentHour > OPEN_HOUR && currentHour < CLOSE_HOUR) {
response = 'We are open for business.';
} else {
response = 'Sorry, we are closed. Open daily from 6am to 8pm.';
}
cb(null, response);
};
CoffeeShop.remoteMethod(
'status', {
http: {
path: '/status',
verb: 'get'
},
returns: {
arg: 'status',
type: 'string'
}
}
);
};
這定義了一個(gè)稱為“狀態(tài)”的簡單遠(yuǎn)程方法疏虫,它不需要任何參數(shù)永罚,并且根據(jù)當(dāng)前時(shí)間檢查時(shí)間并返回一個(gè)表示“打開營業(yè)”或“對(duì)不起我們關(guān)閉”的JSON狀態(tài)消息啤呼。
當(dāng)然,在實(shí)踐中呢袱,您可以使用遠(yuǎn)程方法來做更多有趣和復(fù)雜的事情官扣,例如在將數(shù)據(jù)保留到數(shù)據(jù)庫之前操縱輸入數(shù)據(jù)。您還可以更改調(diào)用遠(yuǎn)程方法的路由产捞,并定義復(fù)雜參數(shù)并返回值醇锚。
使用遠(yuǎn)程方法
- 回到應(yīng)用程序根目錄,運(yùn)行應(yīng)用程序:
$ node .
- 轉(zhuǎn)到http:// localhost:3000 / explorer查看API資源管理器坯临。然后點(diǎn)擊CoffeeShops焊唬,你會(huì)看到有一個(gè)新的REST端點(diǎn),GET / CoffeeShop / status調(diào)用遠(yuǎn)程方法看靠。
點(diǎn)擊try it out赶促!您會(huì)看到調(diào)用遠(yuǎn)程方法的結(jié)果:
{
"status": "Open for business."
}
通過LoopBack,很輕易地添加了一個(gè)遠(yuǎn)程方法。
在遠(yuǎn)程方法中執(zhí)行創(chuàng)建,檢索吠裆,更新和刪除方法
狀態(tài)遠(yuǎn)程方法是微不足道的比被,但遠(yuǎn)程方法還可以訪問任何標(biāo)準(zhǔn)模型創(chuàng)建,檢索菜皂,更新和刪除方法來執(zhí)行數(shù)據(jù)處理和驗(yàn)證。這是一個(gè)簡單的例子(這不是在loopback-getting-started庫中):
module.exports = function(CoffeeShop) {
...
CoffeeShop.getName = function(shopId, cb) {
CoffeeShop.findById( shopId, function (err, instance) {
var response = "Name of coffee shop is " + instance.name;
cb(null, response);
console.log(response);
});
}
...
CoffeeShop.remoteMethod (
'getName',
{
http: {path: '/getname', verb: 'get'},
accepts: {arg: 'id', type: 'number', http: { source: 'query' } },
returns: {arg: 'name', type: 'string'}
}
);
}
然后如果您訪問遠(yuǎn)程方法,例如:
http://0.0.0.0:3000/api/CoffeeShops/getname?id=1
將會(huì)得到響應(yīng):
{
"name": "Name of coffee shop is Bel Cafe"
}
六凸主、添加一個(gè)靜態(tài)頁面
中間件簡介
在繼續(xù)之前,您首先需要了解Express中間件的基礎(chǔ)知識(shí)额湘。中間件只是一個(gè)JavaScript函數(shù)卿吐,可以訪問表示HTTP請(qǐng)求的請(qǐng)求對(duì)象(req),表示HTTP響應(yīng)的響應(yīng)對(duì)象(res)锋华,以及Express應(yīng)用程序的請(qǐng)求 - 響應(yīng)周期中嗡官,由一個(gè)名為next的變量表示的下一個(gè)中間件。
中間件可以做什么毯焕?
- 執(zhí)行任何代碼衍腥。
- 更改請(qǐng)求和響應(yīng)對(duì)象。
- 結(jié)束請(qǐng)求 - 響應(yīng)周期纳猫。
- 調(diào)用堆棧中的下一個(gè)中間件紧阔。
LoopBack中間件就像Express中間件,除了LoopBack添加了相位的概念续担,使您能夠輕松設(shè)置調(diào)用中間件的順序擅耽。這避免了Express的一個(gè)棘手問題:確保中間件在需要的時(shí)候能夠執(zhí)行。
當(dāng)您使用應(yīng)用程序生成器創(chuàng)建應(yīng)用程序時(shí)物遇,它將創(chuàng)建一個(gè)server/middleware.json
文件乖仇,指定中間件在哪個(gè)階段執(zhí)行憾儒。注冊新的中間件與編輯此JSON文件一樣簡單:
server/middleware.json
{
"initial:before": {
"loopback#favicon": {}
},
"initial": {
"compression": {},
"cors": {
"params": {
"origin": true,
"credentials": true,
"maxAge": 86400
}
},
"helmet#xssFilter": {},
"helmet#frameguard": {
"params": [
"deny"
]
},
"helmet#hsts": {
"params": {
"maxAge": 0,
"includeSubdomains": true
}
},
"helmet#hidePoweredBy": {},
"helmet#ieNoOpen": {},
"helmet#noSniff": {},
"helmet#noCache": {
"enabled": false
}
},
"session": {},
"auth": {},
"parse": {},
"routes": {
"loopback#rest": {
"paths": [
"${restApiRoot}"
]
}
},
"files": {},
"final": {
"loopback#urlNotFound": {}
},
"final:after": {
"strong-error-handler": {}
}
}
middleware.json
中的每個(gè)頂層鍵都定義了一個(gè)中間件階段:initial
,session
乃沙,auth
等等起趾,到final
為止。在給定階段之前和之后警儒,還有修改器注冊中間件训裆。在給定階段的前后也有注冊中間件的修改器。
更換或修改默認(rèn)的根路由處理程序
應(yīng)用程序通常需要提供靜態(tài)內(nèi)容蜀铲,如HTML和CSS文件边琉,客戶端JavaScript文件,圖像等记劝。
使用LoopBack應(yīng)用程序默認(rèn)的腳手架很容易做到变姨。您將去配置應(yīng)用程序去啟動(dòng)/client文件夾中的靜態(tài)資源。
首先厌丑,您必須禁用根URL的默認(rèn)路由處理程序定欧。當(dāng)你加載應(yīng)用程序的根URL [http:// localhost:3000/](http:// localhost:3000/)時(shí),你看到應(yīng)用程序用一個(gè)簡單的狀態(tài)消息怒竿,如這個(gè):
{"started":"2014-11-20T21:59:47.155Z","uptime":42.054}
這是因?yàn)槟J(rèn)情況下砍鸠,腳手架應(yīng)用程序具有一個(gè)名為root.js的啟動(dòng)腳本,該腳本為根路徑(“/”)設(shè)置路由處理中間件:
server/boot/root.js
module.exports = function(server) { // Install a `/` route that returns server status
var router = server.loopback.Router();
router.get('/', server.loopback.status());
server.use(router);
};
該代碼說耕驰,對(duì)于根URI(“/”)的任何GET請(qǐng)求爷辱,應(yīng)用程序?qū)⒎祷豯oopback.status()的結(jié)果。要加入您自己的靜態(tài)頁面耍属,您需要禁用此腳本托嚣。要么刪除它巩检,要么將其重命名為沒有.js結(jié)尾的東西(確保應(yīng)用程序不會(huì)執(zhí)行它)厚骗。
定義靜態(tài)中間件
接下來,您需要定義靜態(tài)中間件來為/ client目錄中的文件提供服務(wù)兢哭。
server/middleware.json
...
"files": {},
...
添加以下內(nèi)容:
server/middleware.json
...
"files": {
"loopback#static": {
"params": "$!../client"
}
},
...
添加一個(gè)HTML文件
這些行定義靜態(tài)中間件领舰,使應(yīng)用程序?qū)? client目錄中的文件作為靜態(tài)內(nèi)容。$迟螺!
字符表示路徑是相對(duì)于middleware.json文件的位置冲秽。
/client/index.html
<head><title>LoopBack</title></head>
<body>
<h1>LoopBack Rocks!</h1>
<p>Hello World... </p>
</body>
運(yùn)行
現(xiàn)在再次運(yùn)行應(yīng)用程序:
node .
七、添加自定義的Express路由
引入引導(dǎo)腳本
當(dāng)LoopBack應(yīng)用程序啟動(dòng)(也稱為引導(dǎo)(bootstraps))時(shí)矩父,它將運(yùn)行/server/boot
目錄中的腳本锉桑,稱為引導(dǎo)腳本。默認(rèn)情況下窍株,LoopBack按字母順序加載引導(dǎo)腳本民轴。
應(yīng)用程序生成器創(chuàng)建的標(biāo)準(zhǔn)LoopBack應(yīng)用腳手架中包含執(zhí)行基本初始化的以下標(biāo)準(zhǔn)引導(dǎo)腳本(在/ server / boot中):
-
authentication.js
- 通過調(diào)用app.enableAuth()來啟用應(yīng)用程序的身份驗(yàn)證攻柠。 -
root.js
- 使用loopback.status()中間件定義/
返回服務(wù)器狀態(tài)的根路由。
添加一個(gè)新的啟動(dòng)腳本
例如后裸,在/server/boot
目錄中添加一個(gè)名為routes.js的新引導(dǎo)腳本瑰钮,其代碼如下:
/server/boot/routes.js
module.exports = function(app) {
// Install a "/ping" route that returns "pong"
app.get('/ping', function(req, res) {
res.send('pong');
});
}
除此之外,也可以使用Express路由器中間件微驶,如下所示:
/server/boot/routes.js
module.exports = function(app) {
var router = app.loopback.Router();
router.get('/ping', function(req, res) {
res.send('pongaroo');
});
app.use(router);
}
實(shí)際上浪谴,您也可以使用Express API在server.js中添加路由。例如因苹,在調(diào)用app.start()之前將此調(diào)用添加到app.use():
server/server.js
...
app.use('/express-status', function(req, res, next) {
res.json({ running: true });
});
// start the server if `$ node server.js`
if (require.main === module) {
app.start();
}
LoopBack應(yīng)用程序可以輕松地執(zhí)行Express應(yīng)用程序可以執(zhí)行的所有操作苟耻。如果您熟悉Express,LoopBack將會(huì)更容易學(xué)習(xí)容燕。
運(yùn)行引導(dǎo)腳本
現(xiàn)在梁呈,再次運(yùn)行應(yīng)用程序:
加載http://0.0.0.0:3000/ping。您會(huì)得到一個(gè)'pong'的響應(yīng)蘸秘。
現(xiàn)在一個(gè)簡單的loopback應(yīng)用程序就已經(jīng)搭建完成了官卡。
八、下一步
接下來的教程將涵蓋:
- 在單個(gè)應(yīng)用程序中使用多個(gè)數(shù)據(jù)源醋虏。
- 模型之間的關(guān)系寻咒。
- 遠(yuǎn)程鉤子。
- 使用權(quán)限控制來保護(hù)REST接口颈嚼。
- 用戶注冊和認(rèn)證