1
0
mirror of https://github.com/node-red/node-red.git synced 2023-10-10 13:36:53 +02:00

Messaging API support in CSV node

This commit is contained in:
Kunihiko Toumura 2020-10-26 20:25:52 +09:00
parent 15a600c763
commit 8007bea7db
2 changed files with 51 additions and 9 deletions

View File

@ -55,7 +55,7 @@ module.exports = function(RED) {
node.template = clean(node.template);
node.hdrSent = false;
this.on("input", function(msg) {
this.on("input", function(msg, send, done) {
if (msg.hasOwnProperty("reset")) {
node.hdrSent = false;
}
@ -140,9 +140,10 @@ module.exports = function(RED) {
}
msg.payload = ou;
msg.columns = node.template.join(',');
if (msg.payload !== '') { node.send(msg); }
if (msg.payload !== '') { send(msg); }
done();
}
catch(e) { node.error(e,msg); }
catch(e) { done(e); }
}
else if (typeof msg.payload == "string") { // convert CSV string to object
try {
@ -251,13 +252,13 @@ module.exports = function(RED) {
msg.payload = node.store;
msg.columns = node.template.filter(val => val).join(',');
delete msg.parts;
node.send(msg);
send(msg);
node.store = [];
}
}
else {
msg.columns = node.template.filter(val => val).join(',');
node.send(msg); // finally send the array
send(msg); // finally send the array
}
}
else {
@ -281,19 +282,21 @@ module.exports = function(RED) {
newMessage.parts.count -= 1;
}
}
node.send(newMessage);
send(newMessage);
}
}
node.linecount = 0;
done();
}
catch(e) { node.error(e,msg); }
catch(e) { done(e); }
}
else { node.warn(RED._("csv.errors.csv_js")); }
else { node.warn(RED._("csv.errors.csv_js")); done(); }
}
else {
if (!msg.hasOwnProperty("reset")) {
node.send(msg); // If no payload and not reset - just pass it on.
send(msg); // If no payload and not reset - just pass it on.
}
done();
}
});
}

View File

@ -719,4 +719,43 @@ describe('CSV node', function() {
});
});
it('should call done when message processing is completed', function(done) {
const completeNode = require("nr-test-utils").require("@node-red/nodes/core/common/24-complete.js");
const flow = [ { id:"n1", type:"csv", temp:"a,b,c,d", wires:[[]]},
{ id:"c1", type:"complete", scope: ["n1"], uncaught:false, wires:[["h1"]]},
{ id:"h1", type:"helper", wires:[[]]} ];
helper.load([csvNode,completeNode], flow, function() {
const n1 = helper.getNode("n1");
const h1 = helper.getNode("h1");
h1.on("input", function(msg) {
try {
msg.should.have.a.property('payload', "1,2,3,4");
done();
} catch (e) {
done(e);
}
});
n1.receive({payload:"1,2,3,4"});
});
});
it('should call done when input causes an error', function(done) {
const completeNode = require("nr-test-utils").require("@node-red/nodes/core/common/24-complete.js");
const flow = [ { id:"n1", type:"csv", temp:"a,b,c,d", wires:[[]]},
{ id:"c1", type:"complete", scope: ["n1"], uncaught:false, wires:[["h1"]]},
{ id:"h1", type:"helper", wires:[[]]} ];
helper.load([csvNode,completeNode], flow, function() {
const n1 = helper.getNode("n1");
const h1 = helper.getNode("h1");
h1.on("input", function(msg) {
try {
msg.should.have.a.property('payload', 1);
done();
} catch (e) {
done(e);
}
});
n1.receive({payload:1}); // neither object nor string
});
});
});