You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-04 15:02:09 +03:00
Move command out of the index.js
This commit is contained in:
42
index.js
42
index.js
@@ -5,6 +5,7 @@ var net = require("net"),
|
||||
util = require("util"),
|
||||
utils = require("./lib/utils"),
|
||||
Queue = require("./lib/queue"),
|
||||
Command = require("./lib/command"),
|
||||
events = require("events"),
|
||||
parsers = [],
|
||||
// This static list of commands is updated from time to time.
|
||||
@@ -277,14 +278,14 @@ RedisClient.prototype.init_parser = function () {
|
||||
// That way the result / error won't stay in a try catch block and catch user things
|
||||
this.reply_parser.send_error = function (data) {
|
||||
process.nextTick(function() {
|
||||
this.return_error(data);
|
||||
}.bind(this));
|
||||
}.bind(this);
|
||||
self.return_error(data);
|
||||
});
|
||||
};
|
||||
this.reply_parser.send_reply = function (data) {
|
||||
process.nextTick(function() {
|
||||
this.return_reply(data);
|
||||
}.bind(this));
|
||||
}.bind(this);
|
||||
self.return_reply(data);
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
RedisClient.prototype.on_ready = function () {
|
||||
@@ -498,7 +499,6 @@ RedisClient.prototype.connection_gone = function (why) {
|
||||
this.retry_timer = setTimeout(retry_connection, this.retry_delay, this);
|
||||
};
|
||||
|
||||
var err_code = /^([A-Z]+)\s+(.+)$/;
|
||||
RedisClient.prototype.return_error = function (err) {
|
||||
var command_obj = this.command_queue.shift(), queue_len = this.command_queue.length;
|
||||
// send_command might have been used wrong => catch those cases too
|
||||
@@ -508,7 +508,7 @@ RedisClient.prototype.return_error = function (err) {
|
||||
err.command = command_obj.command;
|
||||
}
|
||||
|
||||
var match = err.message.match(err_code);
|
||||
var match = err.message.match(utils.errCode);
|
||||
// LUA script could return user errors that don't behave like all other errors!
|
||||
if (match) {
|
||||
err.code = match[1];
|
||||
@@ -537,7 +537,7 @@ RedisClient.prototype.return_reply = function (reply) {
|
||||
// If the "reply" here is actually a message received asynchronously due to a
|
||||
// pubsub subscription, don't pop the command queue as we'll only be consuming
|
||||
// the head command prematurely.
|
||||
if (this.pub_sub_mode && Array.isArray(reply) && reply.length > 0 && reply[0]) {
|
||||
if (this.pub_sub_mode && Array.isArray(reply) && reply[0]) {
|
||||
type = reply[0].toString();
|
||||
}
|
||||
|
||||
@@ -613,6 +613,7 @@ RedisClient.prototype.return_reply = function (reply) {
|
||||
if (Buffer.isBuffer(reply)) {
|
||||
reply = reply.toString();
|
||||
}
|
||||
// If in monitoring mode only two commands are valid ones: AUTH and MONITOR wich reply with OK
|
||||
len = reply.indexOf(" ");
|
||||
timestamp = reply.slice(0, len);
|
||||
argindex = reply.indexOf('"');
|
||||
@@ -627,16 +628,6 @@ RedisClient.prototype.return_reply = function (reply) {
|
||||
}
|
||||
};
|
||||
|
||||
// This Command constructor is ever so slightly faster than using an object literal, but more importantly, using
|
||||
// a named constructor helps it show up meaningfully in the V8 CPU profiler and in heap snapshots.
|
||||
function Command(command, args, sub_command, buffer_args, callback) {
|
||||
this.command = command;
|
||||
this.args = args;
|
||||
this.sub_command = sub_command;
|
||||
this.buffer_args = buffer_args;
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
RedisClient.prototype.send_command = function (command, args, callback) {
|
||||
var arg, command_obj, i, elem_count, buffer_args, stream = this.stream, command_str = "", buffered_writes = 0, err;
|
||||
|
||||
@@ -842,8 +833,6 @@ function Multi(client, args) {
|
||||
}
|
||||
}
|
||||
|
||||
exports.Multi = Multi;
|
||||
|
||||
commands.forEach(function (fullCommand) {
|
||||
var command = fullCommand.split(' ')[0];
|
||||
|
||||
@@ -1045,7 +1034,7 @@ Multi.prototype.execute_callback = function (err, replies) {
|
||||
|
||||
// If we asked for strings, even in detect_buffers mode, then return strings:
|
||||
if (replies[i] instanceof Error) {
|
||||
var match = replies[i].message.match(err_code);
|
||||
var match = replies[i].message.match(utils.errCode);
|
||||
// LUA script could return user errors that don't behave like all other errors!
|
||||
if (match) {
|
||||
replies[i].code = match[1];
|
||||
@@ -1132,10 +1121,5 @@ exports.createClient = function(port_arg, host_arg, options) {
|
||||
throw new Error('Unknown type of connection in createClient()');
|
||||
};
|
||||
|
||||
exports.print = function (err, reply) {
|
||||
if (err) {
|
||||
console.log("Error: " + err);
|
||||
} else {
|
||||
console.log("Reply: " + reply);
|
||||
}
|
||||
};
|
||||
exports.print = utils.print;
|
||||
exports.Multi = Multi;
|
||||
|
13
lib/command.js
Normal file
13
lib/command.js
Normal file
@@ -0,0 +1,13 @@
|
||||
'use strict';
|
||||
|
||||
// This Command constructor is ever so slightly faster than using an object literal, but more importantly, using
|
||||
// a named constructor helps it show up meaningfully in the V8 CPU profiler and in heap snapshots.
|
||||
function Command(command, args, sub_command, buffer_args, callback) {
|
||||
this.command = command;
|
||||
this.args = args;
|
||||
this.sub_command = sub_command;
|
||||
this.buffer_args = buffer_args;
|
||||
this.callback = callback;
|
||||
}
|
||||
|
||||
module.exports = Command;
|
@@ -130,23 +130,23 @@ ReplyParser.prototype.execute = function (buffer) {
|
||||
try {
|
||||
type = this._buffer[this._offset++];
|
||||
|
||||
if (type === 43) { // +
|
||||
if (type === 43) { // Strings +
|
||||
ret = this._parseResult(type);
|
||||
|
||||
this.send_reply(ret);
|
||||
} else if (type === 45) { // -
|
||||
} else if (type === 45) { // Errors -
|
||||
ret = this._parseResult(type);
|
||||
|
||||
this.send_error(ret);
|
||||
} else if (type === 58) { // :
|
||||
} else if (type === 58) { // Integers :
|
||||
ret = this._parseResult(type);
|
||||
|
||||
this.send_reply(ret);
|
||||
} else if (type === 36) { // $
|
||||
} else if (type === 36) { // Bulk strings $
|
||||
ret = this._parseResult(type);
|
||||
|
||||
this.send_reply(ret);
|
||||
} else if (type === 42) { // 42 *
|
||||
} else if (type === 42) { // Arrays *
|
||||
// set a rewind point. if a failure occurs,
|
||||
// wait for the next execute()/append() and try again
|
||||
offset = this._offset - 1;
|
||||
|
14
lib/utils.js
14
lib/utils.js
@@ -46,8 +46,20 @@ function toArray(args) {
|
||||
return arr;
|
||||
}
|
||||
|
||||
function print (err, reply) {
|
||||
if (err) {
|
||||
console.log("Error: " + err);
|
||||
} else {
|
||||
console.log("Reply: " + reply);
|
||||
}
|
||||
}
|
||||
|
||||
var redisErrCode = /^([A-Z]+)\s+(.+)$/;
|
||||
|
||||
module.exports = {
|
||||
reply_to_strings: replyToStrings,
|
||||
reply_to_object: replyToObject,
|
||||
to_array: toArray
|
||||
to_array: toArray,
|
||||
print: print,
|
||||
errCode: redisErrCode
|
||||
};
|
||||
|
@@ -5,7 +5,7 @@ var config = require("../lib/config");
|
||||
var helper = require("../helper");
|
||||
var redis = config.redis;
|
||||
|
||||
describe("The 'sync' method", function () {
|
||||
describe.skip("The 'sync' method", function () {
|
||||
|
||||
helper.allTests(function(parser, ip, args) {
|
||||
|
||||
@@ -23,7 +23,7 @@ describe("The 'sync' method", function () {
|
||||
// "Protocol error, got "K" as reply type byte"
|
||||
// I'm uncertain if this is correct behavior or not
|
||||
// TODO: Fix the command queue state error occuring
|
||||
it.skip('try to sync with the server and fail other commands', function (done) {
|
||||
it('try to sync with the server and fail other commands', function (done) {
|
||||
client.on('error', function(err) {
|
||||
assert.equal(err.message, 'Protocol error, got "K" as reply type byte');
|
||||
assert.equal(err.command, 'SET');
|
||||
|
@@ -16,15 +16,15 @@ function startRedis (conf, done) {
|
||||
// don't start redis every time we
|
||||
// include this helper file!
|
||||
if (!process.env.REDIS_TESTS_STARTED) {
|
||||
process.env.REDIS_TESTS_STARTED = true;
|
||||
process.env.REDIS_TESTS_STARTED = true;
|
||||
|
||||
before(function (done) {
|
||||
startRedis('./conf/redis.conf', done);
|
||||
});
|
||||
before(function (done) {
|
||||
startRedis('./conf/redis.conf', done);
|
||||
});
|
||||
|
||||
after(function (done) {
|
||||
if (rp) rp.stop(done);
|
||||
});
|
||||
after(function (done) {
|
||||
if (rp) rp.stop(done);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
Reference in New Issue
Block a user