Vapor文檔學(xué)習(xí)四 :Config

應(yīng)用的配置通常都是基于他們部署的環(huán)境。Vapor為用戶自定義提供了靈活的配置選擇。

QuickStart

Vapor應(yīng)用的配置文件放在Config文件夾里,下面以servers的配置為例:

./
├── Config/
│   ├── servers.json

文件內(nèi)容如下:

{
    "default": {
        "port": "$PORT:8080",
        "host": "0.0.0.0",
        "securityLayer": "none"
    }
}

默認(rèn)配置serverhttp服務(wù)器,host:0.0.0.0 ,端口號:8080,那么請求的地址就是:http://localhost:8080。

Custom Keys(自定義鍵值)

打開servers.json文件,在json里添加自定義鍵值對

{
  "http": {
    "host": "0.0.0.0",
    "port": 8080,
    "custom-key": "custom value"
  }
}

采用如下代碼可以在應(yīng)用里獲取自定義的配置:

let customValue = drop.config["servers", "http", "custom-key"]?.string ?? "default"

Config Syntax(配置語法)

可以使用app.config[<#file-name#>, <#path#>, <#to#>, <#file#>]這樣的語法直接訪問配置內(nèi)容,假設(shè)我們創(chuàng)建了一個keys.json文件,并且有如下代碼:

{
  "test-names": [
    "joe",
    "jane",
    "sara"
  ],
  "mongo": {
    "url" : "www.customMongoUrl.com"
  }
}

我可以通過將第一個下標(biāo)設(shè)置為keys來訪問這個文件,獲取第一個名字或者獲取mongo url:

let name = drop.config["keys", "test-names", 0]?.string ?? "default"
let mongoUrl = drop.config["keys", "mongo", "url"]?.string ?? "default"

Advanced Configurations(高級配置)

默認(rèn)配置可以滿足基本需求,但是在復(fù)雜環(huán)境下就不能只采用默認(rèn)配置了,比如開發(fā)和生產(chǎn)環(huán)境使用不同的host。在這種復(fù)雜的環(huán)境下我們需要在Config/目錄下傳創(chuàng)建不同的配置文件。下面的目錄就是針對不同的環(huán)境設(shè)置不同的配置:

WorkingDirectory/
├── Config/
│   ├── servers.json
│   ├── production/
│   │   └── servers.json
│   ├── development/
│   │   └── servers.json
│   └── secrets/
│       └── servers.json

可以使用--env=指定運(yùn)行環(huán)境。自定義的環(huán)境也是支持的,production, development, 和testingVapor默認(rèn)提供的。

$ vapor run --env=production

優(yōu)先級:從上到下依次降低。

  1. CLI (see below)
  2. Config/secrets/
  3. Config/name-of-environment/
  4. Config/
    也就是說,如果用戶使用app.config["servers", "host"],程序會優(yōu)先從CLI中搜索對應(yīng)的key,然后是secrets/,然后往下繼續(xù)搜索。
    例如:
    servers.json
{
  "http": {
    "host": "0.0.0.0",
    "port": 9000
  }
}

production/servers.json

{
  "http": {
    "host": "127.0.0.1",
    "port": "$PORT"
  }
}

“$ NAME”語法可用于訪問環(huán)境變量的所有值

請注意,servers.jsonproduction/servers.json中定義了相同的key:“host”,“post”,在我們的應(yīng)用中會訪問:

// 根據(jù)上面的配置會加載 0.0.0.0 or 127.0.0.1 
let host = drop.config["servers", "http", "host"]?.string ?? "0.0.0.0"
// 會加載9000或者環(huán)境變量中可以獲取的port
let port = drop.config["servers", "http", "port"]?.int ?? 9000

COMMAND LINE(命令行)

除了Config/文件夾下的json文件外,我們也可以使用命令行傳參的方法進(jìn)行配置,這些值默認(rèn)保存在“cli”文件中,但是也可以獲取更豐富的選項(xiàng)。

  1. --KEY=VALUE

通過CLI命令行設(shè)置的參數(shù)可以通過configcli文件訪問,例如:

 --mongo-password=$MONGO_PASSWORD

在程序中我們可以這樣訪問:

let mongoPassword = drop.config["cli", "mongo-password"]?.string
  1. --CONFIG:FILE-NAME.KEY=CUSTOM-VALUE
    如果你希望將命令行參數(shù)設(shè)置為除“cli”之外的文件,則可以使用此更高級的規(guī)范。例如,以下CLI命令:
--config:keys.analytics=124ZH61F

在程序中我們可以這樣訪問:

let analyticsKey = drop.config["keys", "analytics"]?.string

<b>總結(jié):</b>Config文檔主要是介紹了如何進(jìn)行Config、Config的語法(json),根據(jù)環(huán)境分別配置、配置文件的優(yōu)先級、以及使用CLI命令行進(jìn)行配置等內(nèi)容。(CLI命令行配置我也不懂,暫時放這,有空再研究吧。)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容