从一个 table 触发多个 select 并使用 node-red dashdb-in 和 dashdb-out 模块将结果插入 Target table

Fire multiple select from one table and insert the result into Target table using node-red dashdb-in and dashdb-out modules

我正在尝试使用 node-red 实现从 DB2 table 读取并插入到不同的 DB2 table。为此,我正在使用 dashdb 模块(https://flows.nodered.org/node/node-red-nodes-cf-sqldb-dashdb)。我确保列在源和目标中都匹配,并测试使用 select 查询在目标 table 中插入多条记录作为 select * 来自 source_table 然后插入查询对于插入 table。 现在我还有另一件事,我需要在源 table 上触发多个 select 查询并将结果记录异步插入到目标 table 中。 所有多个 select 查询都是相同的,除了 id = ? .所以我尝试将查询放在 msg.payload 中的 for 循环中,像这样

var queryID = 2; // max number of id to be querying against
            for (i=1; i<=queryID; i++) { 
                console.log("COUNT", i)
                msg.payload = `select * from source_table where id= ${i}` // only i changes
                node.send(msg); // i pass it to next node which is dashBD out node responsible for selecting record from source table
            } 

但是这样做只会执行最后一个循环值 2 而不会 node.send 将 i = 1 的值传递给下一个节点。

任何人都可以在这里阐明一下:它将 id=2 的结果插入目标 table 两次。相反,我想根据 for 循环 i 变量执行插入。这是图中的第二个节点模块函数

module.exports = function(RED) {
function fireMultipleQuery(nodeConfig) {
    RED.nodes.createNode(this,nodeConfig);
    var node = this;
    node.on('input', function(msg) {
        var queryID = 2; // max number of id to be querying against
        for (i=1; i<=queryID; i++) { 
            console.log("COUNT", i)
            msg.payload = `select * from source_table where id= ${i}` // only i changes
            node.send(msg); // i pass it to next node which is dashBD out node responsible for selecting record from source table
        });

     }
    RED.nodes.registerType("fire-query-node", fireMultipleQuery);
}

这是我的流程

NodeJS 是一种传递参考语言。

因此,因为循环正在更新相同的 msg 对象,所以它也在更改已发送的版本。

您可能想要克隆 msg 或为每次发送创建一个新对象。

您可以使用 RED.util.cloneMessage()

复制消息