qishibo/AnotherRedisDesktopManager · error

e.message

Error message

e.message

What it means

In exact-match mode (refreshKeyListExact in KeyList.vue) the app replaces SCAN with a single client.exists(match) call; if that promise rejects, the raw server/client error message is shown in a toast. EXISTS is a read command, so the app's readonly guard does not apply - the rejection comes from the connection or the server.

Source

Thrown at src/components/KeyList.vue:243

      this.$parent.$parent.$parent.$refs.operateItem.searchIcon = 'el-icon-loading';
      // show cancel scanning btn after scanning for a while
      this.$parent.$parent.$parent.$refs.operateItem.toggleCancelIcon(true);
    },
    resetSearchStatus() {
      // search input icon recover
      this.$parent.$parent.$parent.$refs.operateItem.searchIcon = 'el-icon-search';
      // remove cancel scanning btn
      this.$parent.$parent.$parent.$refs.operateItem.toggleCancelIcon(false);
      // reset loading all status
      this.loadingAll = false;
    },
    refreshKeyListExact() {
      const match = this.getMatchMode(false);

      this.client.exists(match).then((reply) => {
        this.keyList = (reply == 1) ? [Buffer.from(match)] : [];
      }).catch((e) => {
        this.$message.error(e.message);
      }).finally(() => {
        this.scanMoreDisabled = true;
        this.resetSearchStatus();
      });
    },
    cancelScanning() {
      if (this.scanStreams.length) {
        for (const stream of this.scanStreams) {
          stream.pause && stream.pause();
        }
      }
    },
    getMatchMode(fillStar = true) {
      let match = this.$parent.$parent.$parent.$refs.operateItem.searchMatch;

      match = match || '*';

      if (fillStar && !match.match(/\*/)) {

View on GitHub (pinned to c149855106)

Solutions

  1. Reconnect and retry the exact search.
  2. If the message is 'NOPERM' or similar, grant the ACL user the @keyspace/@read categories.
  3. Confirm the server is up with a trivial command (PING) in the CLI tab.
Defensive patterns

Strategy: validation

Validate before calling

// verify the connection is alive before exact-match search
await client.ping(); // throws early with a clear cause if the connection is dead
const reply = await client.exists(match);

Type guard

const keyExists = (reply) => reply === 1;

Try / catch

this.client.exists(match)
  .then((reply) => { this.keyList = keyExists(reply) ? [Buffer.from(match)] : []; })
  .catch((e) => {
    this.$message.error(e.message);
    // connection is likely dead: verify with ping before retrying
  })
  .finally(() => this.resetSearchStatus());

Prevention

When it happens

Trigger: Searching exactly when the connection has already dropped (the catch fires before closeConnection finishes); an ACL user denied EXISTS (-exists / missing @keyspace); server unavailable or restarting; proxy rejecting the command.

Common situations: Typing in the search box right after a network change; restricted ACL users created without the keyspace category; searching on a connection the server just closed (timeout).

Related errors


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