What is redis-errors?
The redis-errors npm package provides a set of custom error classes for handling Redis-related errors in a more structured and meaningful way. It helps developers to catch and handle specific Redis errors more effectively.
What are redis-errors's main functionalities?
Custom Error Classes
The package provides custom error classes like ReplyError, AbortError, ParserError, and AggregateError. These classes help in identifying and handling specific types of Redis errors.
const { ReplyError, AbortError, ParserError, AggregateError } = require('redis-errors');
try {
// Simulate a Redis operation that throws an error
throw new ReplyError('This is a reply error');
} catch (error) {
if (error instanceof ReplyError) {
console.error('Caught a ReplyError:', error.message);
}
}
Error Handling
The package allows for structured error handling by checking the instance of the error and responding accordingly. This makes it easier to debug and manage Redis-related errors.
const { ReplyError, AbortError, ParserError, AggregateError } = require('redis-errors');
function handleError(error) {
if (error instanceof ReplyError) {
console.error('ReplyError:', error.message);
} else if (error instanceof AbortError) {
console.error('AbortError:', error.message);
} else if (error instanceof ParserError) {
console.error('ParserError:', error.message);
} else if (error instanceof AggregateError) {
console.error('AggregateError:', error.message);
} else {
console.error('Unknown error:', error.message);
}
}
try {
// Simulate a Redis operation that throws an error
throw new AbortError('This is an abort error');
} catch (error) {
handleError(error);
}
Other packages similar to redis-errors
ioredis
ioredis is a robust, full-featured Redis client for Node.js. It provides built-in error handling for various Redis errors, but it does not offer the same level of custom error classes as redis-errors. Instead, it focuses on providing a comprehensive set of features for interacting with Redis.
node-redis
node-redis is another popular Redis client for Node.js. It includes basic error handling capabilities but lacks the specialized custom error classes provided by redis-errors. It is designed to be simple and easy to use for basic Redis operations.

redis-errors
All error classes used in node_redis
from v.3.0.0 are in here. They can be required as needed.
Install
Install with NPM:
npm install redis-errors
Usage
const { ReplyError, InterruptError } = require('redis-errors');
try {
await client.set('foo')
} catch (err) {
if (err instanceof InterruptError) {
console.error('Command might have been processed')
}
if (err instanceof ReplyError) {
}
throw err
}
client.set('foo', (err, res) => {
if (err) {
if (err instanceof InterruptError) {
}
}
})
Error classes
All errors returned by NodeRedis use own Error classes. You can distinguish
different errors easily by checking for these classes.
To know what caused the error they might contain properties to know in more
detail what happened.
Each error contains a message
, a name
and a stack
property. Please be aware
that the stack might not be useful due to the async nature and is in those cases
therefore limited to two frames.
There might be more not yet documented properties as well. Please feel free to
open a pull request to document those as well.
RedisError
Properties
:
Properties depend on the individual error.
All errors returned by NodeRedis (client) are RedisError
s.
Subclass of Error
ReplyError
Properties
:
args
: The arguments passed to the command.command
: The command name.code
: The Redis
error code. Redis itself uses some internal error codes.
All errors returned by Redis itself (server) will be a ReplyError
.
Subclass of RedisError
ParserError
Properties
:
buffer
: The raw buffer input stringified.offset
: The character count where the parsing error occurred.
Parsing errors are returned as ParserError
.
Subclass of RedisError
Note: If you encounter one of these please report that error including the
attached offset
and buffer
properties!
AbortError
Properties
:
args
: The arguments passed to the command.command
: The command name.
If a command was not yet executed but rejected, it'll return a AbortError
.
Subclass of RedisError
InterruptError
Properties
:
args
: The arguments passed to the command.command
: The command name.origin
: The original error that caused the interrupt
All executed commands that could not fulfill (e.g. network drop while
executing) return a InterruptError
.
Subclass of AbortError
Note: Interrupt errors can happen for multiple reasons that are out of the
scope of NodeRedis itself. There is nothing that can be done on library side
to prevent those.
License
MIT