Sailsjs从两个不同的mysql数据库中获取数据

时间:2019-03-15 08:36:47

标签: javascript mysql node.js sails.js sails-postgresql

我正在使用Sails js v 1.x构建rest api 我需要连接两个mysql数据库,所以我已经在config / datastores.js文件中定义了它们:

module.exports.datastores = {
 default: {
      adapter: require('sails-mysql'),
      url: 'mysql://root:12345@192.168.0.5:3306/test',
    },
    mysqldb: {
      adapter: require('sails-mysql'),
      url: 'mysql://root:12345@192.168.0.5:3306/test2',
    },

};

在我的控制器中,我具有此功能,该功能需要通过加入数据库test和test2来获取数据

module.exports = {

    index: function (req, res) {
        User.getDatastore().sendNativeQuery("SELECT * from test.users u INNER JOIN test2.users t ON u.id=t.id limit 10",function(err, rawResult) {
            res.send(rawResult);
        })
    },

};

但这给我一个错误:

{
   "code": "ER_NO_SUCH_TABLE",
    "errno": 1146,
    "sqlMessage": "Table 'test.users' doesn't exist",
}

我还有一个空白的用户模型,当查询类似select * from users时,原始sql查询的执行非常完美(它使用默认数据库,即test) 如何通过Sails js连接多个MySQL数据库来实现这种查询?

1 个答案:

答案 0 :(得分:0)

我能够通过这种方式解决问题:

我的config.datastore文件:

module.exports.datastores = {
 default: {
      adapter: require('sails-mysql'),
      url: 'mysql://root:12345@192.168.0.5:3306/',
    },

};

我的控制器:

module.exports = {

    index: function (req, res) {
        User.getDatastore().sendNativeQuery("SELECT * from test.users u INNER JOIN test2.users t ON u.id=t.id limit 10",function(err, rawResult) {
            res.send(rawResult);
        })
    },

};

一开始很难弄清楚,因为没有这样的示例显示使用原始MySQL查询时来自不同数据库的多个表上的联接。

我所做的唯一更改是我刚刚从默认连接URL中删除了数据库名称。现在,我可以访问此特定服务器上的所有数据库,还可以加入多个数据库。