Sails js:如何在 Sails js 的单个模型中定义两个 MySQL 连接到两个不同的数据库?

Posted

技术标签:

【中文标题】Sails js:如何在 Sails js 的单个模型中定义两个 MySQL 连接到两个不同的数据库?【英文标题】:Sails js: How can I define two MySQL connections to two different databases in a single model in Sails js? 【发布时间】:2016-01-09 22:10:47 【问题描述】:

我创建了一个模型 Employee.js 和 EmployeeController.js。我在 Employee.js 文件中定义了两个连接:

    module.exports = 

    connection: 'LocalhostmysqlServer',
    attributes:     
      name:
        type:"string", 
        required:true,
      ,
      empnum:
        type:"integer",
        required:true,
        unique: true
      ,
      email:
        type:"string",
        required:true,
        unique: true
        
    ,

    connection: 'LocalhostMysqlServer1',
      attributes: 
        username:
        type:"string", 
        required:true,
      ,
      usrnum:
        type:"integer",
        required:true,
        unique: true
      ,
      email:
        type:"string",
        required:true,
        unique: true
      
    ,
 ;

下面是我的 EmployeeController.js 文件,其中包含两个视图:CreateEmp 和 CreateUsr,与此模型和控制器相关联。此外,我还定义了两个函数来处理来自这些视图的发布请求。在这里,我想将 CreateEmp 中的数据插入到不同的数据库中,并将 CreateUsr 中的数据插入到不同的数据库中。

    module.exports = 

      createEmp: function(req,res)
        'use strict';
        res.view('new.ejs');
      ,

      createUsr: function(req,res)
        'use strict';
        res.view('newUser.ejs');
      ,

      createEmployee: function(req, res)
        if(req.method=="POST")
          var name= req.param("name");
          var empnum= req.param("empnum");
          var email= req.param("email");

          var insert= "INSERT INTO employee(name, empnum, email) VALUES ('"+name+"', "+empnum+", '"+email+"')";
          Employee.query(insert, function(err, record)
            if(err)
              console.log(err);
            else
              console.log(record);
            
          )
        
      ,

      createUser: function(req, res)
        if(req.method=="POST")
          var username= req.param("username");
          var usrnum= req.param("usrnum");
          var email= req.param("email");

          var insert= "INSERT INTO user (username, usrnum, email) VALUES ('"+username+"', "+usrnum+", '"+email+"')";
          Employee.query(insert, function(err, record)
            if(err)
              console.log(err);
            else
              console.log(record);
            
          )
        
      ,

    ;

我在此处包含了我的 config/connections.js:

    module.exports.connections = 

      localDiskDb: 
        adapter: 'sails-disk'
      ,


      LocalhostMysqlServer: 
        adapter: 'sails-mysql',
        //module: 'sails-mysql',
        host: 'localhost',
        user: 'root',
        password: 'disisanshu',
        database: 'sailsTest1',
        tableName: 'employee'
      ,

      LocalhostMysqlServer1: 
        adapter: 'sails-mysql',
        host: 'localhost',
        user: 'root',
        password: 'disisanshu',
        database: 'sailsTest2',
        tableName: 'user'
      

    ;

我在下面包含了我的 model.js:

    module.exports.models = 


      // migrate: 'alter'

      connection: 'LocalhostMysqlServer',
      migrate: 'alter',
      connection1: 'LocalhostMysqlServer1',
      migrate: 'alter'

    ;

【问题讨论】:

【参考方案1】:

你没有理由这样做。

您可能希望减少数据库的负载。应该实现一种主从数据库类型的结构。

此外,数据库应该与应用程序的其余部分完全分离。这就是为什么你应该只有一个连接。 如果你的数据库负载增加,水平扩展它(添加更多的服务器来分配负载)——mySQL 对这些事情有好处。这可以而且应该在不更改您的应用代码的情况下完成。

【讨论】:

嘿,我只是想使用相同的东西,因为我想将公共数据保存到不同的数据库中,例如:地址模块将数据保存到地址表中,其他 5 个相同应用程序。我只想将相同的公共模块数据使用到单个数据库中。【参考方案2】:

您不能在同一个模型中使用两个不同的连接——希望没有文档表明这是可能的!您只需定义两个不同的模型。

此外,在一个对象中两次声明同一个键并不是真正有效的 javascript(就像您在第一个代码块中使用 connection 和在最后一个代码块中使用 migrate 一样)。如果它们不同,第二个定义将覆盖第一个定义。

【讨论】:

嘿,可以在不同的模型中使用不同的MySql DB吗?比如我想在地址模块中使用connection1,在person模块中使用connection。

以上是关于Sails js:如何在 Sails js 的单个模型中定义两个 MySQL 连接到两个不同的数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Sails.Js - 我如何在sails.Js 中进行分页

引用单个表的多列 - Sails JS API 模型

如何在sails.js 中配置https

Sails.js - 如何避免 Sails JS 在数据库表上查找 Id(因为该表没有 id 列)

Sails.js WebSocket 如何创建新通道?

如何在 Sails.js 中实现连接多方