LoopBack學習 之 創建應用程序

英文地址:
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應用程序可以加載多個可能會相互沖突的配置文件。由優先級最高的文件設置的值將始終生效。優先事項是:

  1. 環境特定的配置,基于NODE_ENV的值; 例如,server/config.staging.json。
  2. 本地配置文件 ; 例如,server/config.local.json。
  3. 默認配置文件 ; 例如,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屬性來保留。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容