From a1ee5834107bfe4d72fdda150a9d8ddbab74a4b0 Mon Sep 17 00:00:00 2001 From: Matteo Collina Date: Fri, 21 Mar 2014 15:21:29 +0100 Subject: [PATCH] Correctly handle bad JSONs in JSONAscoltatore. --- lib/json_ascoltatore.js | 11 +++++++++-- test/json_ascoltatore_spec.js | 11 +++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/json_ascoltatore.js b/lib/json_ascoltatore.js index 92e2ea2..903eb16 100644 --- a/lib/json_ascoltatore.js +++ b/lib/json_ascoltatore.js @@ -27,10 +27,17 @@ JSONAscoltatore.prototype.wrapCallback = function(callback, next) { if (!callback._json_ascoltatore_wrapper) { callback._json_ascoltatore_wrapper = function(t, payload) { debug("converting from JSON"); + var errored = false; + try { - callback(t, JSON.parse(payload)); + payload = JSON.parse(payload); } catch (e) { - console.log("The payload is not a valid JSON", e); + errored = true; + debug("The payload is not a valid JSON", e); + } + + if (!errored) { + callback(t, payload); } }; } diff --git a/test/json_ascoltatore_spec.js b/test/json_ascoltatore_spec.js index cb3bdc7..76860e5 100644 --- a/test/json_ascoltatore_spec.js +++ b/test/json_ascoltatore_spec.js @@ -63,4 +63,15 @@ describe("ascoltatori.JSONAscoltatore", function() { that.instance.pub("hello/123", false); }); }); + + it("should not throw if a bad JSON arrives", function(done) { + var that = this; + this.instance.subscribe("/hello", function(topic, payload) { + done(new Error("this should never happen")); + }, function() { + that.included.publish("/hello", "not a json", function() { + done(); + }); + }); + }); });