From 6d771da9a9415ae87017600a8cd56dfe1ada087c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nathana=C3=ABl=20L=C3=A9caud=C3=A9?= Date: Mon, 10 Dec 2018 13:47:55 -0500 Subject: [PATCH] JSON node: delete msg.schema before sending msg to avoid conflicts --- .../@node-red/nodes/core/parsers/70-JSON.js | 4 +++ test/nodes/core/parsers/70-JSON_spec.js | 32 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js index 4e1e51e47..f696e1f21 100644 --- a/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js +++ b/packages/node_modules/@node-red/nodes/core/parsers/70-JSON.js @@ -56,6 +56,7 @@ module.exports = function(RED) { RED.util.setMessageProperty(msg,node.property,JSON.parse(value)); if (validate) { if (this.compiledSchema(msg[node.property])) { + delete msg.schema; node.send(msg); } else { msg.schemaError = this.compiledSchema.errors; @@ -70,6 +71,7 @@ module.exports = function(RED) { // If node.action is str and value is str if (validate) { if (this.compiledSchema(JSON.parse(msg[node.property]))) { + delete msg.schema; node.send(msg); } else { msg.schemaError = this.compiledSchema.errors; @@ -87,6 +89,7 @@ module.exports = function(RED) { if (validate) { if (this.compiledSchema(value)) { RED.util.setMessageProperty(msg,node.property,JSON.stringify(value,null,node.indent)); + delete msg.schema; node.send(msg); } else { msg.schemaError = this.compiledSchema.errors; @@ -104,6 +107,7 @@ module.exports = function(RED) { // If node.action is obj and value is object if (validate) { if (this.compiledSchema(value)) { + delete msg.schema; node.send(msg); } else { msg.schemaError = this.compiledSchema.errors; diff --git a/test/nodes/core/parsers/70-JSON_spec.js b/test/nodes/core/parsers/70-JSON_spec.js index 2ff98850f..767d09ecf 100644 --- a/test/nodes/core/parsers/70-JSON_spec.js +++ b/test/nodes/core/parsers/70-JSON_spec.js @@ -433,4 +433,36 @@ describe('JSON node', function() { } }); }); + + it('msg.schema property should be deleted before sending to next node (string input)', function(done) { + var flow = [{id:"jn1",type:"json",action:"str",wires:[["jn2"]]}, + {id:"jn2", type:"helper"}]; + helper.load(jsonNode, flow, function() { + var jn1 = helper.getNode("jn1"); + var jn2 = helper.getNode("jn2"); + jn2.on("input", function(msg) { + should.equal(msg.schema, undefined); + done(); + }); + var jsonString = '{"number":3,"string":"allo"}'; + var schema = {title: "testSchema", type: "object", properties: {number: {type: "number"}, string: {type: "string" }}}; + jn1.receive({payload:jsonString, schema:schema}); + }); + }); + + it('msg.schema property should be deleted before sending to next node (object input)', function(done) { + var flow = [{id:"jn1",type:"json",action:"str",wires:[["jn2"]]}, + {id:"jn2", type:"helper"}]; + helper.load(jsonNode, flow, function() { + var jn1 = helper.getNode("jn1"); + var jn2 = helper.getNode("jn2"); + jn2.on("input", function(msg) { + should.equal(msg.schema, undefined); + done(); + }); + var jsonObject = {"number":3,"string":"allo"}; + var schema = {title: "testSchema", type: "object", properties: {number: {type: "number"}, string: {type: "string" }}}; + jn1.receive({payload:jsonObject, schema:schema}); + }); + }); });