有没有一种方法可以使用Node.js在Sequelize模式中的表之间进行替换?

时间:2019-01-22 21:08:40

标签: node.js sequelize.js

我有一个非常相似的表数据库。 table1table2在我的API(nodejs 8)中具有相同的列并使用相同的逻辑。

我想在两个表中共享一个模式。根据请求的标头(我将声明一个全局变量),我要替换并使用一个或另一个表。

我的table1模式:

const Sequelize = require('sequelize')

const Table1 = global.sequelize.define('table1', {
  id: {
    type: Sequelize.BIGINT(20)
  },
  name: {
    type: Sequelize.STRING
  },
  username: {
    type: Sequelize.STRING
  }
})

module.exports = Table1

因此,当我在代码中查询时,我可以始终使用相同的架构-例如:Table.findAll({})-,而不必使用ifs或三元数指定我想要的表

预先感谢

1 个答案:

答案 0 :(得分:0)

前提是不寻常的。我不认为有一种动态更改表名的方法(可能应该,因为模型应该是const)。您可以通过定义两个表来使其工作:

以下是模型/表格:

const Sequelize = require('sequelize')

const setOfColumns = {
  id: {
    type: Sequelize.BIGINT(20)
  },
  name: {
    type: Sequelize.STRING
  },
  username: {
    type: Sequelize.STRING
  }
};

const Table1 = global.sequelize.define('table1', setOfColumns );
const Table2 = global.sequelize.define('table2', setOfColumns );

module.exports = {Table1, Table2}

您说:

  

取决于请求的标头(我将声明一个全局变量)   我要替换并使用一个或另一个表。

哪个IMHO与IF或三进制基本相同。控制器的外观如下:

const tables  = require('../models/Table');
...
let TableModel = req.params.whichTable === '1' ? tables.Table1 : tables.Table2;

TableModel.findAll()..

HTH。