我可以根据每个请求更改数据库吗(Sails.js)

Posted

技术标签:

【中文标题】我可以根据每个请求更改数据库吗(Sails.js)【英文标题】:Can I change databases on each request (Sails.js) 【发布时间】:2016-07-28 03:05:42 【问题描述】:

我有一些 php 脚本正在迁移到 Node.js。我为此使用 Sails.js,我想知道如何根据请求参数更改每个请求的数据库。

目前我有 3-4 个相同的 PostgreSQL 数据库。假设每个数据库对应一个不同的客户端。

下面是当前建立数据库连接的PHP脚本的一段:

$database = $_GET['db'];
$conn_details = "host=localhost port=5432 dbname=$database user=****** password=******";
$dbconn = pg_connect($conn_details);

这里可以看到数据库名来自请求参数“db”。

我想在我的sails.js 控制器中拥有类似的功能。我知道我可以在connections.js中声明多个数据库,并且我可以让模型使用不同的数据库,但我追求的是模型保持不变,只有数据库根据每个请求进行更改。

我发现了 2 个类似的问题,但它们都在很长一段时间内都没有得到解答。 (Here 和 here)

【问题讨论】:

【参考方案1】:

我认为您正在寻找类似子应用的东西

sails-hook-subapps

但它是实验模块。所以我不建议在生产中使用它。其他也不好的选择是像这样乘以你的模型:

一个包含所有方法、属性和“东西”的主模型 许多带有连接配置的模型

在“父”模型中,您将选择要将发送操作发送到哪个模型。比如写法:

getModel: function(dbName)
     return models[dbName];

在模型对象中,您将存储具有不同连接的所有模型。不确定验证器在这种情况下如何工作。您需要测试是否不需要在子模型中执行此类操作

attributes: parentModel.attributes

【讨论】:

以上是关于我可以根据每个请求更改数据库吗(Sails.js)的主要内容,如果未能解决你的问题,请参考以下文章

如何在sails.js 中创建动态策略

我可以在sails.js 资产目录中轻松运行vue.js webapp 吗?

Sails.js 对套接字请求的授权

在sails.js 中更改配置参数而不重新加载服务器

Sails js findOne()返回结果,尽管不满足所有条件

在每个请求结束时都可以调用Doctrine的flush吗?