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

  1. Read the echoed message - Redis states the exact problem (type, arity, auth, readonly)
  2. Confirm the key's type with TYPE key before type-specific commands
  3. Check spelling and argument count (TAB completion / COMMAND DOCS)
  4. 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

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


AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22). Data as JSON: /api/errors/54391b7df3059d81. Report an issue: GitHub.