qishibo/AnotherRedisDesktopManager · error
err.message
Error message
err.message
What it means
Generic catch for normal (non-queued) CLI commands executed via this.anoClient.callBuffer(command, args); the raw ioredis error message is echoed to the terminal. Any server error reply - WRONGTYPE, unknown command, wrong arity, NOAUTH, READONLY, OOM - or a broken connection lands here. The handler also sets multiQueue = null, aborting any open transaction.
Source
Thrown at src/components/CliTab.vue:283
this.monitorInstance.on('monitor', (time, args, source, database) => {
this.scrollToBottom(`${time} [${database} ${source}] ${args.join(' ')}`);
});
});
return;
}
// normal command
const promise = this.anoClient.callBuffer(paramsArr[0], paramsArr.slice(1));
// normal command promise
promise.then((reply) => {
this.content.push(this.resolveResult(reply).trim());
this.execFinished(paramsArr);
this.scrollToBottom();
}).catch((err) => {
this.multiQueue = null;
this.scrollToBottom(err.message);
});
},
execFinished(params) {
const operate = params[0].toLowerCase();
if (operate === 'select' && !isNaN(params[1])) {
this.$bus.$emit('changeDb', this.anoClient, params[1]);
}
// operate may add new key, refresh left key list
if (['hmset', 'hset', 'lpush', 'rpush', 'set', 'sadd', 'zadd', 'xadd', 'json.set', 'arset', 'armset', 'arinsert', 'ts.add', 'ts.create'].includes(operate)) {
this.$bus.$emit('refreshKeyList', this.client, Buffer.from(params[1]), 'add');
}
if (['del'].includes(operate)) {
this.$bus.$emit('refreshKeyList', this.client, Buffer.from(params[1]), 'del');
}
},
scrollToBottom(append = '') {View on GitHub (pinned to c149855106)
Solutions
- Read the echoed message - Redis states the exact problem (type, arity, auth, readonly)
- Confirm the key's type with TYPE key before type-specific commands
- Check spelling and argument count (TAB completion / COMMAND DOCS)
- Ensure the target is a writable master and the connection is authenticated
Defensive patterns
Strategy: try-catch
Validate before calling
// cheap pre-checks before executing a typed command
const type = await client.type(key);
if (commandRequiresString(cmd) && type !== 'string') {
echo(`WRONGTYPE - key is ${type}`);
return;
} Try / catch
// echo the raw message and keep transaction state consistent
try {
const reply = await callBuffer(cmd, args);
echo(format(reply));
} catch (err) {
this.multiQueue = null; // failed command aborts the local queue
echo(err.message); // ioredis message already carries the server's text
} Prevention
- TYPE key before type-specific commands (GET/LPUSH/HGET expectations differ)
- Use TAB completion to avoid misspelled commands and wrong arity
- Confirm module commands exist on the server (COMMAND EXISTS) before using them
When it happens
Trigger: Running a command against the wrong key type (GET on a hash -> WRONGTYPE), a misspelled or unloaded command (module commands on a stock server), wrong arity (LPUSH key with no values), writing to a read-only replica, or issuing commands after the connection dropped.
Common situations: Exploring unfamiliar keys from the CLI, using module commands against a server without the module, forgetting the current SELECT db or key types.
Related errors
- Sentinel & Cluster cannot be checked together!
- message || this.$t('message.test_connection_failed')
- this.$t('message.test_connection_timeout')
- Exists Error: ${e.message}
- (error) ERR DISCARD without MULTI
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/54391b7df3059d81.
Report an issue: GitHub.