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
- Reconnect and retry the exact search.
- If the message is 'NOPERM' or similar, grant the ACL user the @keyspace/@read categories.
- 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
- Guard exact-search UI behind a liveness check (PING) so users get a clear reconnect prompt instead of a raw server error.
- For ACL users, include +exists/@keyspace in the grant set.
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
- e.message
- e.message
- Too Many Attempts To Reconnect. Please Check The Server Stat
- this.$t('message.scan_disabled')
- Stream On Error: ${e.message}
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/ea25b1de5dc9fd86.
Report an issue: GitHub.