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,你可以省略各种信息片段,就像你已经熟悉的那样。例如,以下是一些常见的混合,它们都有可能是有效的连接 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 中配置任何其他内容相同的方式配置数据存储,包括环境变量、命令行选项等等。