{"record":{"id":"5b69d5111b502a7a","repo":"louislam/uptime-kuma","slug":"no-slug","errorCode":null,"errorMessage":"No slug?","messagePattern":"No slug\\?","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"warning","filePath":"server/socket-handlers/status-page-socket-handler.js","lineNumber":275,"sourceCode":"                incident: bean.toPublicJSON(),\n            });\n        } catch (error) {\n            callback({\n                ok: false,\n                msg: error.message,\n                msgi18n: true,\n            });\n        }\n    });\n\n    socket.on(\"getStatusPage\", async (slug, callback) => {\n        try {\n            checkLogin(socket);\n\n            let statusPage = await R.findOne(\"status_page\", \" slug = ? \", [slug]);\n\n            if (!statusPage) {\n                throw new Error(\"No slug?\");\n            }\n\n            callback({\n                ok: true,\n                config: await statusPage.toJSON(),\n            });\n        } catch (error) {\n            callback({\n                ok: false,\n                msg: error.message,\n            });\n        }\n    });\n\n    // Save Status Page\n    // imgDataUrl Only Accept PNG!\n    socket.on(\"saveStatusPage\", async (slug, config, imgDataUrl, publicGroupList, callback) => {\n        try {","sourceCodeStart":257,"sourceCodeEnd":293,"githubUrl":"https://github.com/louislam/uptime-kuma/blob/6b5ea0155793e666666745fb8d6fef1e829543a2/server/socket-handlers/status-page-socket-handler.js#L257-L293","documentation":"Thrown by the getStatusPage handler when R.findOne('status_page', ' slug = ? ', [slug]) returns no row. The handler is behind checkLogin, so it is an authenticated lookup that simply did not find a page for the given slug.","triggerScenarios":"Logged-in client emits 'getStatusPage' with a slug that matches no status_page row (typo, deleted, or not yet created).","commonSituations":"Editor opens a stale link; slug renamed; page deleted in another session; case/whitespace mismatch in the slug.","solutions":["Use a slug from the user's status page list.","Trim and match the exact slug casing stored in the database.","Create the status page if it does not exist."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"const slugs = statusPages.map(p => p.slug);\nif (!slugs.includes(slug)) throw new Error(\"No slug?\");\nsocket.emit(\"getStatusPage\", slug, cb);","typeGuard":"function isKnownStatusPageSlug(slug, list) {\n  return typeof slug === \"string\" && Array.isArray(list) && list.some(p => p.slug === slug);\n}","tryCatchPattern":"try { await emitAsync(\"getStatusPage\", slug, cb); }\ncatch (e) { if (/No slug/.test(e.message)) redirectToList(); else throw e; }","preventionTips":["Use slugs from the editor's page list.","Trim and match slug casing.","Create the page before requesting it."],"tags":["status-page","slug","not-found","socket-io"],"backgroundTag":null,"analyzedSha":"6b5ea0155793e666666745fb8d6fef1e829543a2","analyzedAt":"2026-08-12T23:42:12.959Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}