{"record":{"id":"c1e11051ee734208","repo":"DIYgod/RSSHub","slug":"detail-message-c1e110","errorCode":null,"errorMessage":"${detail.message}","messagePattern":"\\$\\{detail\\.message\\}","errorType":"exception","errorClass":"Error","httpStatus":503,"severity":"error","filePath":"lib/routes/dxy/special.ts","lineNumber":47,"sourceCode":"    const specialId = ctx.req.param('specialId');\n    const { limit = '10' } = ctx.req.query();\n\n    const specialDetail = (await cache.tryGet(`dxy:special:detail:${specialId}`, async () => {\n        const detailParams = {\n            specialId,\n            requestType: 'h5',\n            timestamp: Date.now(),\n            noncestr: generateNonce(8, 'number'),\n        };\n\n        const detail = await ofetch(`${phoneBaseUrl}/newh5/bbs/special/detail`, {\n            query: {\n                ...detailParams,\n                sign: sign(detailParams),\n            },\n        });\n        if (detail.code !== 'success') {\n            throw new Error(detail.message);\n        }\n        return detail.data;\n    })) as SpecialBoardDetail;\n\n    const recommendList = (await cache.tryGet(\n        `dxy:special:recommend-list-v3:${specialId}`,\n        async () => {\n            const listParams = {\n                specialId,\n                requestType: 'h5',\n                pageNum: '1',\n                pageSize: limit,\n                timestamp: Date.now(),\n                noncestr: generateNonce(8, 'number'),\n            };\n\n            const recommendList = await ofetch(`${phoneBaseUrl}/newh5/bbs/special/post/recommend-list-v3`, {\n                query: {","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/DIYgod/RSSHub/blob/bed535e0879dc71c5aff6f1e7bd1ac21ede40115/lib/routes/dxy/special.ts#L29-L65","documentation":"Thrown by the DXY special topic route when the special detail API (`/newh5/bbs/special/detail`) returns a non-success `code`. The route fetches metadata for a 'special' (curated topic) board using signed parameters with `requestType: 'h5'`. If the specialId is invalid, the signature is rejected, or the API is unavailable, the API's own `message` is re-thrown.","triggerScenarios":"The specialId doesn't exist or has been removed; the request signature is invalid; the h5 request type is no longer supported; rate limiting or maintenance.","commonSituations":"Incorrect specialId from an outdated URL; DXY changed the special detail API endpoint or signing requirements; transient server error.","solutions":["Verify the specialId by visiting the DXY special topic page in a browser.","Retry — may be transient.","Inspect the upstream message for specific error details.","If persistent, check for RSSHub updates to the API parameter format."],"exampleFix":"// before\nif (detail.code !== 'success') {\n    throw new Error(detail.message);\n}\n\n// after\nif (detail.code !== 'success') {\n    throw new Error(`DXY special detail API error (specialId=${specialId}, code=${detail.code}): ${detail.message}`);\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":"function isDxySpecialDetailSuccess(resp: unknown): boolean {\n    return typeof resp === 'object' && resp !== null && (resp as any).code === 'success';\n}","tryCatchPattern":"try {\n    const feed = await fetch(`${rsshubUrl}/dxy/bbs/special/${specialId}`);\n} catch (e) {\n    console.error(`DXY special detail API error for specialId ${specialId}: ${e.message}`);\n    throw e;\n}","preventionTips":["Verify the specialId by visiting the DXY special topic page in a browser.","Retry after a delay — may be transient.","Inspect the upstream message for specific error details.","If persistent, check for RSSHub updates to the API parameter format or signing algorithm."],"tags":["dxy","api-error","signed-request","response-validation","bbs"],"backgroundTag":null,"analyzedSha":"bed535e0879dc71c5aff6f1e7bd1ac21ede40115","analyzedAt":"2026-08-12T19:29:35.364Z","schemaVersion":2},"datasetVersion":"2026-08-12T23:17:12.415Z"}