sails.js – 我想在帆升空后dynamic添加数据库连接

在帆升降期间,我还没有为我的数据库提供所有的连接信息。

有没有办法让configuration值取决于承诺或在完成帆升降后dynamic创build连接?

我显然不得不添加一个策略或钩子来处理对需要模型的路由的请求(如果它还没有可用的话),但是在这一点上,我并没有看到如何让帆升降,直到我已经知道连接信息它必须在configuration中)。

我希望我错过了一种dynamic创build连接和连接模型的方法。

是; 在sails.js中有两件事情可以让你做到这一点。 一个目前存在,一个即将到来。

  1. https://github.com/sgress454/sails-hook-autoreload 。 该模块监视磁盘上的configuration文件更改,并在文件更改时重新加载ORM模型。

  2. 我现在正在研究这个确切的function,我的计划是在下周末发表我的作品。 我同意这将是非常有用的。

API将允许您即时在数据库中定义新的模型和连接。 sails.js生命周期callback处理更新ORM和适配器等等。 这是基于事件的,并允许您手动触发事件来更新ORM / Connections,如下所示:

  • sails.emit('hook:dynamic-orm:reload')

这是你需要的吗?

更新 :在Sails v1.0 / Waterline v0.13中,可以通过访问无状态的底层驱动来完成。 例如sails.getDatastore().driver 。 这可以在任何支持新的无状态驱动程序接口的数据库适配器中使用,包括MySQL,PostgreSQL和MongoDB。


在Sails v1.0之前,Sails或Waterline并没有直接支持这个function,但根据你的使用情况,这里有一些很好的解决scheme。 如果您的用例是为了开发目的的less数dynamic连接(例如,在自动重载插件中),并且您愿意生活在边缘,则可以利用私有API作为即时解决scheme: sails.hook.orm.reload() 。 但是,你绝对不希望在生产中使用它,因为它实际上冲刷了整个ORM。

如果您要在运行的Node进程的生命周期中处理运行时dynamic数据存储configuration的更大数量(假设有10个以上的独特configuration),那么情况就不一样了。 在这种情况下,我build议使用相关的原始驱动程序(例如https://github.com/felixge/node-mysql )通过服务直接从池中传递/释放这些dynamic连接。 您仍然可以在您的应用程序中使用常规模型进行静态连接 – 您只需在服务中单独实现dynamic数据库连接即可。 例如,如果您正在构buildphpMyAdmin的托pipe版本,则可以使用较低级别的NPM包来dynamic获取有关用户表的信息,但是您仍然可能希望拥有引用表/集合的AccountDatabase模型在你自己的数据库中。

Sails的集成解决scheme正在开发中。 这种能够利用原始连接生命周期并从用户空间访问的能力是内置事务支持的先决条件,这是我们预计在2016年下半年某时在Sails / Waterline中登陆的事情。同时,如果如上所述,你通过服务方法来封装你的逻辑来召唤/释放连接,现在你将有一个可行的解决scheme,而你的业务逻辑应该或多或less都是未来的certificate(当你升级时,你只需要换掉在你的服务中实现)。 希望有所帮助!