sails.config.datastores
資料儲存區配置(或簡稱資料儲存區)就像是您的适配器的「已儲存設定」。
在 Sails 中,資料庫适配器 是您的應用程式和某種結構化資料儲存(通常是資料庫)之間的中介。但是為了讓适配器在您的 Sails 應用程式和特定的資料庫之間進行通訊,它需要一些額外的資訊。這就是資料儲存區的用途。資料儲存區是字典(純 JavaScript 物件),用於指定 adapter
,以及其他必要的配置資訊,例如 url
,或 host
、port
、user
和 password
。
雖然這可以在每個模型的基礎上被覆寫,但在預設情況下,您應用程式中的每個模型都使用名為「default」的資料儲存區。
為了在開發期間提供便利,Sails 提供了一個內建的資料庫适配器,稱為 sails-disk
。此适配器透過讀取和寫入資料庫記錄到您電腦硬碟上的 JSON 檔案來模擬真實的資料庫。雖然 sails-disk
可以讓您在幾乎任何環境中以最少的設定執行您的 Sails/Node.js 應用程式,但它並非設計用於生產環境。在部署您的應用程式並將其暴露給真實使用者之前,您需要選擇一個合適的資料庫,例如 PostgreSQL、MySQL、MongoDB 等。為此,您需要自訂您的應用程式的預設資料儲存區。
不出所料,您的應用程式所有模型共用的預設資料儲存區名為「default」。因此,要連接不同的資料庫,這就是您要變更的關鍵。例如,假設您想要針對安裝在本機筆記型電腦上的 MySQL 伺服器進行開發。
首先,安裝 Sails 和 Waterline 的 MySQL 适配器。
npm install sails-mysql --save --save-exact
然後編輯您在 config/datastores.js
中的預設資料儲存區配置,使其看起來像這樣。
// config/datastores.js
module.exports.datastores = {
default: {
adapter: require('sails-mysql'),
url: 'mysql://root:squ1ddy@localhost:3306/my_dev_db_name',
}
};
就是這樣!下次您啟動您的應用程式時,您的所有模型都將在您的程式碼執行內建模型方法(如 .create()
或 .find()
)時與指定的 MySQL 資料庫進行通訊。
想要使用不同的資料庫嗎?別擔心,MySQL 只是一個範例。您可以在您的 Sails 應用程式中使用任何支援的資料庫适配器。
您可能已經注意到我們在這裡使用了 url
,而不是指定個別的設定,例如 host
、port
、user
、password
和 database
。這稱為連接 URL(或「連接字串」),這只是另一種更簡潔的方式,來告知 Sails 和 Waterline 您的資料儲存區配置。
這種配置樣式的一個主要好處是,連接 URL 的格式在各種資料庫類型中都是相同的。換句話說,無論您使用的是 MySQL、PostgreSQL、MongoDB 還是幾乎任何其他常見的資料庫技術,您都可以使用看起來大致相同的 URL 來指定基本配置。
protocol://user:password@host:port/database
URL 的 protocol://
部分始終基於您正在使用的适配器(mysql://
、mongodb://
等),而 URL 的其餘部分由您的應用程式需要用來定位和連接到資料庫的憑證和網路資訊組成。以下是上面 MySQL 範例中 url
的解構版本,顯示了每個部分的名稱。
mysql:// root : squ1ddy @ localhost : 3306 / my_dev_db_name
| | | | | |
| | | | | |
protocol user password host port database
在生產環境中,如果您使用的是雲端託管的資料庫,您可能會獲得一個連接 URL(例如 mysql://lkjdsf4:[email protected]:3306/4e843g
)。如果沒有,通常最好從個別的資訊片段自行建立一個。有關如何配置您的特定資料庫的更多資訊,請查看資料庫适配器參考。
如果您擁有上面提到的所有資訊片段,建立連接 URL 很簡單:您只需將它們組合在一起。但有時,您可能不想指定所有這些詳細資訊(例如,如果您想使用預設埠,或者如果您使用的是不需要使用者名稱和密碼的本機資料庫)。
幸運的是,由於資料庫連接 URL 或多或少只是普通的 URL,您可以像您可能已經熟悉的那樣省略各種資訊片段。例如,以下是一些常見的組合,所有這些都可能是有效的連接 URL。
protocol://user:password@host:port/databaseName
protocol://user:password@host/databaseName
(無埠)protocol://user@host:port/databaseName
(無密碼)protocol://host:port/databaseName
(既沒有使用者名稱也沒有密碼)連接 URL 是配置 Sails 應用程式資料庫的建議方法,因此如果可能的話,最好堅持使用它們。但從技術上講,某些适配器也支援配置個別設定(
user
、password
、host
、port
和database
)作為替代方案。在這種情況下,如果同時使用url
標記法和個別設定,則非 URL 配置選項應始終優先。但是,您應該始終使用其中一種方法:url
或個別屬性。混合使用兩種配置策略可能會使适配器感到困惑,或導致底層資料庫驅動程式拒絕您的配置。
當為生產環境部署配置您的應用程式時,您實際上不會使用 config/datastores.js
檔案。相反地,您可以利用 config/env/production.js
,這是一個特殊的配置覆寫檔案,僅在生產環境中應用。這允許您覆寫您在 config/datastores.js
中設定的 url
和 adapter
(或僅 url
)。
// config/env/production.js
module.exports = {
// ...
// Override the default datastore settings in production.
datastores: {
default: {
// No need to set `adapter` again, because we already configured it in `config/datastores.js`.
url: 'mysql://lkjdsf4a23d9xf4:kkwer4l8adsfasd@u23jrsdfsdf0sad.aasdfsdfsafd.us-west-2.ere.amazonaws.com:3306/ke9944a4x23423g',
}
},
// ...
};
連接 URL 在生產環境中真正發光,因為您可以透過替換單個配置鍵來變更它們。這不僅使您的生產環境設定更易於理解,而且還允許您僅透過設定環境變數 (sails_datastores__default__url
) 來替換您的生產環境資料庫憑證。這是一種避免將敏感的資料庫憑證作為提交永久保存在您的版本控制系統中的便捷方法。
Sails 的 ORM,Waterline,具有完善的适配器系統,用於支援各種資料儲存區。Sails 核心團隊維護了 MySQL、PostgreSQL、MongoDB 和 本機磁碟的官方适配器;並且社群适配器適用於 Oracle、DB2、MSSQL、OrientDB 和更多資料庫。
您可以在此處找到支援的資料庫适配器的最新列表。
仍然找不到您的資料庫的适配器嗎?您也可以建立自訂适配器。或者,如果您想修改/更新現有的适配器,請與其維護者聯絡。(需要協助嗎?按一下此處以取得更多資源。)
您可以設定多個指向同一個适配器或不同适配器的資料儲存區。
例如,您可能正在使用 MySQL 作為您的主要資料庫,但也需要與第二個包含來自現有 Java 或 PHP 應用程式資料的 MySQL 資料庫整合。同時,您可能需要與第三個 MongoDB 資料庫整合,該資料庫是幾個月前促銷活動遺留下來的。
您可以如下設定 config/datastores.js
// config/datastores.js
module.exports.datastores = {
default: {
adapter: require('sails-mysql'),
url: 'mysql://root@localhost:3306/dev',
},
existingEcommerceDb: {
adapter: require('sails-mysql'),
url: 'mysql://djbluegrass:[email protected]:3306/store',
},
q3PromoDb: {
adapter: require('sails-mongo'),
url: 'mongodb://djbluegrass:[email protected]:27017/promotional',
}
};
注意: 如果資料儲存區正在使用特定的适配器,則所有共用該适配器的資料儲存區都將在
sails lift
時載入,無論模型是否實際使用它們。在上面的範例中,如果模型定義為datastore: 'existingEcommerceDb'
,則在執行階段,Waterline 將建立兩個 MySQL 連接池:一個用於existingEcommerceDb
,另一個用於default
。由於此行為,我們建議註解掉或從config/datastores.js
中移除任何您實際上未使用的「期望的」資料儲存區配置。
一些通用經驗法則
config/datastores.js
中的 default
鍵(或者,如果您不想簽入您的憑證,請使用 config/local.js
)。config/env/production.js
(或者,如果您不想簽入您的憑證,請設定環境變數)。datastore
。config/datastores.js
和 config/env/production.js
檔案之外,您還可以以與您在 Sails 中配置任何其他項目相同的方式配置資料儲存區,包括環境變數、命令列選項等等。