在帆升降期间,我还没有掌握数据库的所有连接信息。
有没有办法让配置值依赖于承诺或在风帆升降完成后动态创建连接?
我显然必须添加一个策略或挂钩来处理对需要该模型的路线的请求(如果它还不可用),但是此时我还没看到如何让帆升起直到我已经知道了连接信息(它必须在配置中)。
我希望我错过了一种动态创建连接并将模型连接到它们的方法。
答案 0 :(得分:3)
更新:在Sails v1.0 / Waterline v0.13中,这可以通过访问无状态的底层驱动程序来完成;例如
sails.getDatastore().driver
。这可以在任何支持新的无状态驱动程序接口的数据库适配器中使用,包括MySQL,PostgreSQL和MongoDB。
在Sails v1.0之前,Sails或Waterline中没有直接支持正式,但根据您的使用情况,有一些很好的解决方案。如果您的用例是用于开发目的的少数动态连接(例如,在自动重新加载插件中),并且您愿意生活在边缘,那么您可以利用私有API作为立即 - 术语解决方法:sails.hook.orm.reload()
。但是你肯定不希望在生产中使用它,因为它真的会刷新整个ORM。
如果您 将在运行的Node流程的生命周期内处理更大数量(让我们说> 10个唯一配置)的运行时动态数据存储配置,那么& #39;一个不同的故事。在这种情况下,我建议使用相关的原始驱动程序(例如https://github.com/felixge/node-mysql)直接通过service从池中召唤/释放这些动态连接。您仍然可以在应用中使用常规模型进行静态连接 - 您最好在服务中单独实施动态数据库连接。例如,如果您正在构建phpMyAdmin的托管版本,则可以使用较低级别的NPM程序包来动态获取有关用户的信息。表格,但您仍然可能希望Account
和Database
模型引用存储在您自己的数据库中的表/集合。
针对Sails的更集成的解决方案正在开发中。这种利用原始连接生命周期并从用户区访问它的能力是内置事务支持的先决条件,这是我们期望在2016年下半年的Sails / Waterline中获得的东西。同时,如果如上所述,您通过服务方法将您的逻辑封装到召唤/释放连接,您现在有一个可行的解决方案,您的业务逻辑应该或多或少是未来证明(当您升级时,您只需要交换服务中的实现)。希望有所帮助!
答案 1 :(得分:1)
是; sails.js中的两件事允许你这样做。一个目前存在,一个即将到来。
https://github.com/sgress454/sails-hook-autoreload。此模块监视磁盘上的配置文件更改,并在文件更改时重新加载ORM模型。
我正在研究这个确切的功能,我的计划是在下周末发布我的作品。我同意这将非常有用。
API允许您动态定义数据库中的新模型和连接 。 sails.js生命周期回调处理更新ORM和适配器等等。它基于事件,允许您手动触发事件以更新ORM / Connections,如下所示:
sails.emit('hook:dynamic-orm:reload')
这是你需要的吗?
答案 2 :(得分:1)
我找到了MySql DB的解决方法
重要提示:在我的情况下,我将更改数据库,但所有数据库都具有相同的架构,只是它们的名称和数据不同,并确保添加您需要的任何错误处理
在config / connection.js中-------- 禁用池化
mysql_database: {
adapter: 'sails-mysql',
host: 'localhost',
user: 'root', //optional
password: '12345', //optional
database: 'db1', //optional
pool: false
},
现在导航到
node_modules /帆-MySQL的/ LIB /连接/ spawn.js
添加connectionObject.config = sails.SwitchDbConfig
connectionObject.config = sails.SwitchDbConfig
var conn = mysql.createConnection(connectionObject.config);
conn.connect(function (err) {
afterwards(err, conn);
});
现在最后在任何地方设置sails.SwitchDbConfig表单(服务,控制器等) 如
sails.SwitchDbConfig = {
pool: false,
connectionLimit: 5,
waitForConnections: true,
adapter: 'sails-mysql',
host: 'localhost',
user: 'root',
password: '12345',
database: sails.DB_NAME,
identity: 'mysql_database'
}
最后,如果你发现有什么问题需要更新......请ping