From a5381964d96603a6fe882250aa00aee0a37f5c78 Mon Sep 17 00:00:00 2001 From: Pieter Noordhuis Date: Tue, 30 Nov 2010 23:10:02 +0100 Subject: [PATCH] Add option to specify whether to return strings or buffers for bulk data --- index.js | 2 +- lib/parser/hiredis.js | 7 +++++-- lib/parser/javascript.js | 17 ++++++++++++++--- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 446b7ab34a..567efe8752 100644 --- a/index.js +++ b/index.js @@ -110,7 +110,7 @@ function RedisClient(stream, options) { self.emitted_end = false; reply_parser.debug_mode = exports.debug_mode; - self.reply_parser = new reply_parser.Parser(); + self.reply_parser = new reply_parser.Parser({ return_buffers: false }); // "reply error" is an error sent back by redis self.reply_parser.on("reply error", function (reply) { self.return_error(reply); diff --git a/lib/parser/hiredis.js b/lib/parser/hiredis.js index 9a7709b4c0..23edc1e699 100644 --- a/lib/parser/hiredis.js +++ b/lib/parser/hiredis.js @@ -2,7 +2,10 @@ var events = require("events"), util = require("../util").util, hiredis = require("hiredis"); -function HiredisReplyParser() { +function HiredisReplyParser(options) { + this.options = options || {}; + this.return_buffers = this.options.return_buffers; + if (this.return_buffers == undefined) this.return_buffers = true; this.reset(); events.EventEmitter.call(this); } @@ -14,7 +17,7 @@ exports.debug_mode = false; exports.type = "hiredis"; HiredisReplyParser.prototype.reset = function() { - this.reader = new hiredis.Reader({ return_buffers: true }); + this.reader = new hiredis.Reader({ return_buffers: this.return_buffers }); } HiredisReplyParser.prototype.execute = function(data) { diff --git a/lib/parser/javascript.js b/lib/parser/javascript.js index 22ae5ab6ce..baccfe455d 100644 --- a/lib/parser/javascript.js +++ b/lib/parser/javascript.js @@ -1,7 +1,10 @@ var events = require("events"), util = require("../util").util; -function RedisReplyParser() { +function RedisReplyParser(options) { + this.options = options || {}; + this.return_buffers = this.options.return_buffers; + if (this.return_buffers == undefined) this.return_buffers = true; this.reset(); events.EventEmitter.call(this); } @@ -245,9 +248,17 @@ RedisReplyParser.prototype.send_error = function (reply) { RedisReplyParser.prototype.send_reply = function (reply) { if (this.multi_bulk_length > 0 || this.multi_bulk_nested_length > 0) { - this.add_multi_bulk_reply(reply); + if (!this.return_buffers && Buffer.isBuffer(reply)) { + this.add_multi_bulk_reply(reply.toString("utf8")); + } else { + this.add_multi_bulk_reply(reply); + } } else { - this.emit("reply", reply); + if (!this.return_buffers && Buffer.isBuffer(reply)) { + this.emit("reply", reply.toString("utf8")); + } else { + this.emit("reply", reply); + } } };