英文地址:
http://loopback.io/doc/en/lb3/Creating-an-application.html
創建應用程序
使用應用程序生成器
創建應用程序的最簡單方法是使用應用程序生成器。
可以通過從頭開始編寫一個LoopBack應用程序,但應用程序生成器可以做所有的“繁重的”來創建標準項目布局的基本腳手架。然后,您可以使用CLI工具自定義應用程序以滿足您的需求。
一般來說,文檔假設您已經使用應用程序生成器創建了應用程序。
創建應用程序后,您可能需要配置它,例如:關閉堆棧跟蹤,禁用API資源管理器,并檢索環境變量的值。有關詳細信息,請參閱 環境特定配置。
標準工程布局
應用程序生成器創建具有標準項目布局的應用程序。
總結:
-
server 目錄
- server.js - 主要應用腳本; 見下文。
- config.json - 全局應用程序設置,如REST API根,要使用的主機名和端口等。請參閱config.json。
- model-config.json - 將模型綁定到數據源,并指定模型是否暴露于REST之外。請參閱model-config.json。
- datasources.json - 數據源配置文件。請參閱datasources.json。
client 目錄(除README存根之外為空)
common/models目錄 - 在使用模型生成器創建模型時創建。
每個模型的JSON文件和JavaScript文件(例如my-model.json和my-model.js)。
主應用腳本(server.js)
var loopback = require('loopback');
var boot = require('loopback-boot');
var app = module.exports = loopback();
app.start = function() {
// start the web server
return app.listen(function() {
app.emit('started');
var baseUrl = app.get('url').replace(/\/$/, '');
console.log('Web server listening at: %s', baseUrl);
if (app.get('loopback-component-explorer')) {
var explorerPath = app.get('loopback-component-explorer').mountPath;
console.log('Browse your REST API at %s%s', baseUrl, explorerPath);
}
});
};
// 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();
});
環境特定配置
概觀
LoopBack應用程序具有以下類型的配置文件:
- 默認情況下, 應用范圍配置文件server/config.json。您也可以使用 server/config.local.js 設置不能使用簡單JSON的值。
- 默認情況下, 數據源配置文件server/datasources.json。您也可以使用 server/datasources.local.js 設置不能使用簡單JSON的值。
- 默認情況下 ,模型的應用程序級配置server/model-config.json。
- 中間件配置文件,默認情況下 server/middleware.json。
- 缺省情況下 ,LoopBack組件的配置文件server/component-config.json。
注意: 使用*.js文件配置LoopBack應用程序將僅在原始.json文件保留到位時才起作用。而不是用.json文件替換文件.js ,您應該覆蓋.json文件中的.js文件的值。也就是說,通過將默認.json文件保留為空,所有配置都可以在.js文件中完成。
LoopBack將始終加載以下配置文件(如果存在)
- server/config.json。
- server/config.local.json 或 server/config.local.js。
- server/datasources.json
- server/datasources.local.json 要么 server/datasources.local.js
- server/model-config.json
- server/model-config.local.json 要么 server/model-config.local.js
- server/middleware.json
- server/middleware.local.json 要么 server/middleware.local.js
- server/component-config.json
- server/component-config.local.json 要么 server/component-config.local.js
另外,當設置NODE_ENV環境變量時,LoopBack將從以下位置加載配置:
- server/config.env.json/js
- server/datasources.env.json/js
- server/model-config.env.json/js
- server/middleware.env.json/js
- server/component-config.env.json/js
env NODE_ENV的值(通常是“開發”,“分期”或“生產”)在哪里 。 這使您能夠為開發,分期和生產環境設置配置。
注意:
LoopBack應用程序可以加載多個可能會相互沖突的配置文件。由優先級最高的文件設置的值將始終生效。優先事項是:
- 環境特定的配置,基于NODE_ENV的值; 例如,server/config.staging.json。
- 本地配置文件 ; 例如,server/config.local.json。
- 默認配置文件 ; 例如,server/config.json。
應用程序配置文件示例:
config.json
{
"host": "localhost",
"restApiRoot": "/api",
"host": "0.0.0.0",
"port": 3000,
"remoting": {
"context": false,
"rest": {
"normalizeHttpPath": false,
"xml": false
},
"json": {
"strict": false,
"limit": "100kb"
},
"urlencoded": {
"extended": true,
"limit": "100kb"
},
"cors": false,
"handleErrors": false
},
"legacyExplorer": false
}
config.local.js
'use strict';
var GLOBAL_CONFIG = require('../global-config');
var env = (process.env.NODE_ENV || 'development');
var isDevEnv = env === 'development' || env === 'test';
module.exports = {
hostname: GLOBAL_CONFIG.hostname,
restApiRoot: GLOBAL_CONFIG.restApiRoot,
livereload: process.env.LIVE_RELOAD,
isDevEnv: isDevEnv,
indexFile: require.resolve(isDevEnv ?
'../client/ngapp/index.html' : '../client/dist/index.html'),
port: GLOBAL_CONFIG.port,
legacyExplorer: GLOBAL_CONFIG.legacyExplorer
};
數據源配置文件示例:
datasources.json
{
"db": {
"name": "db",
"connector": "memory"
}
}
datasources.production.js
// Use the same environment-based configuration as in staging
module.exports = require('./datasources.staging.js');
datasources.staging.js
module.exports = {
db: {
connector: 'mongodb',
hostname: process.env.DB_HOST || 'localhost',
port: process.env.DB_PORT || 27017,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: 'todo-example',
}
};
中間件配置文件的示例:
middleware.json
http://loopback.io/doc/en/lb3/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.development.json
{
"final:after": {
"strong-error-handler": {
"params": {
"debug": true,
"log": true
}
}
}
}
有關示例應用程序,請參見 https://github.com/strongloop/loopback-example-full-stack/tree/master/server。
重要:
即使使用環境特定的配置文件,LoopBack仍然需要默認的基本文件。JSON文件中的空對象就足夠了。
應用范圍配置
在其中定義應用程序服務器端設置 server/config.json。
您可以覆蓋在其中設置的值 config.json :
- config.local.js 要么 config.local.json
- config.env.js 或者 , (通常 或 ) 的值 在哪里 。例如。config.env.jsonenvNODE_ENVdevelopmentproductionconfig.production.json
重要提示: 附加文件可以僅使用值類型(字符串,數字)覆蓋頂級鍵。不支持嵌套對象和數組。
例如:
config.production.js
module.exports = {
host: process.env.CUSTOM_HOST,
port: process.env.CUSTOM_PORT
};
確保不返回堆棧跟蹤
默認情況下,JSON回應中不會返回堆棧跟蹤,但如果它們已被啟用進行開發和調試,請確保它們已關閉生產。
- 將NODE_ENV環境變量設置為“production”
- 包括以下內容 server/middleware.production.json:
server/middleware.production.json
"final:after": {
"strong-error-handler": {}
}
注: 該應用程序生成器創建一個middleware.developmnet.json與你的上述配置文件,因此,所有你需要做的就是確保NODE_ENV環境變量不是development。
禁用API資源管理器
當您開發應用程序時,LoopBack API Explorer非常棒,但出于安全考慮,您可能不希望在生產環境中公開它。
對于使用loopback-component-explorer的應用程序,在生產中禁用資源管理器:
- 將NODE_ENV環境變量設置為“production”。
- 然后在server/component-config.production.json:
server/middleware.production.json
{
"loopback-component-explorer": null
}
在HTTP響應中包含堆棧跟蹤
默認情況下,LoopBack 3.0應用程序可以從HTTP響應(典型的生產)中排除錯誤堆棧跟蹤。對于開發和調試,您可能希望包含它們; 要這樣做,設置NODE_ENV環境變量,development以便應用程序使用middleware.development.json。
該文件包括以下內容,其中包括HTTP響應中的堆棧跟蹤:
{
"final:after": {
"strong-error-handler": {
"params": {
"debug": true,
"log": true
}
}
}
}
數據源配置
您可以覆蓋datasources.json 以下文件中設置的值 :
- datasources.local.js 要么 datasources.local.json
- datasources.env.js 或者 , 環境變量(通常為 或 ) 的值 在哪里 。例如,。datasources.env.jsonenvNODE_ENVdevelopmentproductiondatasources.production.json
示例數據源:
datasources.json
{
db: {
connector: 'memory'
}
}
datasources.production.json
{
db: {
connector: 'mongodb',
database: 'myapp',
user: 'myapp',
password: 'secret'
}
}
您還可以將文件配置為使用環境變量:datasource.env.js
datasources.production.js
module.exports = {
db: {
connector: 'mongodb',
hostname: process.env.DB_HOST,
port: process.env.DB_PORT || 27017,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: 'myapp',
}
在上面的例子中,運行export PRODUCTION=true(或set PRODUCTION=trueWindows)將加載數據源。
從環境變量獲取值
使用此命令設置環境變量并在一個命令中運行應用程序:
$ MY_CUSTOM_VAR="some value" node .
或單獨命令:
$ export MY_CUSTOM_VAR="some value"
$ node .
那么這個變量可以作為您的應用程序使用 process.env.MY_CUSTOM_VAR。
版本化您的API 編輯這個頁面
您可以根據應用程序“主要”版本輕松地將版本控制添加到REST API路由中package.json。
config.local.js 在應用程序/server目錄中添加一個名稱 為以下代碼的文件:
/server/config.local.js
var p = require('../package.json');
var version = p.version.split('.').shift();
module.exports = {
restApiRoot: '/api' + (version > 0 ? '/v' + version : ''),
host: process.env.HOST || 'localhost',
port: process.env.PORT || 3000
};
這需要從version屬性中的主要版本號package.json并將其附加到REST API根目錄。如果您的應用程序的主版本為0,那么REST API根目錄仍然是默認的 /api。
所以,例如,如果versionin package.json是2.0.1,那么默認情況下暴露的內置模型路由為:
GET http://localhost:3000/api/Users
現在暴露在:
GET http://localhost:3000/api/v2/Users
標準項目結構 編輯這個頁面
使用LoopBack的標準項目結構,以便更容易地開發和維護您的項目。
LoopBack項目文件和目錄位于應用程序根目錄下。在該目錄中,標準的LoopBack項目結構具有以下子目錄:
- server - 節點應用程序腳本和配置文件。
- client - 客戶端JavaScript,HTML和CSS文件(僅限于LoopBack工具)。
- common - 客戶端和服務器通用的文件。 該/models子目錄包含模型JSON和JavaScript文件。
- definitions- API和產品定義YAML文件(僅限IBM API連接)。
注意: 客戶端和服務器之間共享的模型JSON和JavaScript文件進入/common/models目錄。僅服務器文件進入/server/models,客戶端進入/client/models
頂級應用程序目錄
文件或目錄 | 描述 | 描述 |
---|---|---|
/node-modules 目錄 | 包含指定為依賴關系的節點包package.json。更新npm install。 | N / A |
package.json | 標準npm包裝規格。請參閱package.json。 | N / A |
README.md | Stub文件用于內部文檔。 | N / A |
/ server目錄 - 節點應用程序文件
文件或目錄 | 描述 | 描述 |
---|---|---|
/boot 目錄 | 添加腳本以執行初始化和設置。請參閱引導腳本。 | 腳本會按字母順序自動執行。 |
/models 目錄 | 僅限服務器的模型定義。 | 節點:myModel = app.models.myModelName |
component-config.json | 指定要加載的LoopBack組件。 僅由Strongloop工具創建。不用于API連接。 | |
config.json | 應用設置。請參閱config.json。 | app.get('setting-name') |
datasources.json | 數據源配置文件。請參閱datasources.json。有關示例,請參閱創建新的數據源。 | app.datasources['datasource-name'] |
middleware.json | 中間件定義文件。有關詳細信息,請參閱定義中間件。 | N / A |
middleware.development.json | 具有開發配置的中間件定義文件。有關詳細信息,請參閱定義中間件。請參閱準備部署。 | |
model-config.json | 型號配置文件。請參閱model-config.json。有關詳細信息,請參閱將模型連接到數據源。 | N / A |
server.js | 主應用程序文件。 | N / A |
/ client目錄 - 客戶端應用程序文件
文件或目錄 | 描述 | 描述 |
---|---|---|
README.md | LoopBack生成器創建空README.md文件。 | N / A |
其他 | 添加您的HTML,CSS,客戶端JavaScript文件。 |
/ common目錄 - 共享應用程序文件
文件或目錄 | 描述 | 描述 |
---|---|---|
/models 目錄 | 自定義模型文件:1. 模型定義JSON文件,按照約定命名model-name.json; 例如customer.json。2. 按慣例命名的自定義模型腳本model-name.js; 例如,customer.js。有關更多信息,請參閱模型定義JSON文件和自定義模型。 見下面的注釋。 | 節點:myModel = app.models.myModelName |
重要:
LoopBack 模型生成器 將駱駝殼模型名稱(例如MyModel)自動轉換為小寫虛線名稱(my-model)。例如,如果您使用模型生成器創建名為“FooBar”的模型,則會創建文件foo-bar.json并foo-bar.js輸入common/models。然而,模型名稱(“FooBar”)將通過模型的name屬性來保留。