3

我正在使用 nodejs 重建一个遗留的 PHP 应用程序,经过大约一周的探索后,我选择了sailsjs。一切都很好,直到我意识到在sails 中您只能访问控制器中的会话变量。因此,我无法与模型建立动态连接。

旧版应用程序使用 PHP 会话全局变量在身份验证后连接到不同的 postgresql 数据库,我似乎无法在网络上找到解决方法。我在网上看到过类似的问题。周围有任何节点/帆/数据库极客吗?

我正在考虑使用sails 进行身份验证,因为它已经工作并使用expressjs 来实现我的sails 应用程序将通过以某种形式的微服务架构发送数据库连接参数来调用的服务。

目前在 localhost:1337 上运行风帆,在 localhost:3000 上运行我的快递。这是一个好方法吗?

4

3 回答 3

1

我在这里回答我自己的问题,这里已经提出了类似的问题,并且提供的答案似乎都不起作用。我没有在我的模型中使用水线,而是成功地使用了 pg 模块,

$ npm install pg --save
var pg = require('pg');

这样,我可以将连接字符串从我的控制器动态传递给我的模型,而忽略水线 ORM。

我创建了一个sails 服务来获取和设置每个会话的数据库连接字符串。

然后对于每个查询,我传递存储在会话中的连接字符串:

var sessionConnection = ConnectionsService.getSessionConnection(req,res);

  pg.connect(sessionConnection, function(err, client, done) {
     // do connection stuff and queries here

  });

希望这对其他人有帮助

于 2016-07-19T12:19:30.113 回答
1

我认为您不能动态更改connection模型中定义的属性。但是,您可以尝试在连接将动态更改的模型中不设置任何连接,并根据用户设置默认配置连接。就像是:

User.find(1, function(err, user){

    connection = select_connection_for_phones(user);

    // changing the model connection dinamically
    // You should not define any connection in the model.
    sails.config.models.connection = connection;
    Phone.find({user : user.id }, do_something_else);

});

这样,您select_connection_for_phones将接收用户并返回字符串连接,为模型设置全局配置连接,然后开始查询。如果您的型号电话没有定义连接,它将使用默认值。

相反的方式,可能是这样的:

User.find(1, function(err, user){

    connection = select_connection_for_phones(user);

    // changing properties of the postgresql connection.
    // You must define all your models with this connection.
    sails.config.connections.postgresql.host = host_from_user(user);
    sails.config.connections.postgresql.port = port_from_user(user);
    Phone.find({user : user.id }, do_something_else);

});

在这种情况下,您应该使用相同的连接设置模型,并动态更改连接的属性。

于 2016-07-19T08:24:26.833 回答
0

我从sails-postgresql v0.11.4 创建了一个带有附加功能的sails 适配器。 https://www.npmjs.com/package/sails-postgresql-pp

于 2017-03-16T15:12:07.620 回答