DIYgod/RSSHub · error · InvalidParameterError
Invalid rank type
Error message
Invalid rank type
What it means
InvalidParameterError thrown by the xsijishe rank handler when ctx.req.param('type') is neither 'weekly' nor 'monthly' — the only two leaderboards the site exposes. The type maps to both a display title and a list index (0 or 1) used to select the correct ul li element via .eq(index).
Source
Thrown at lib/routes/xsijishe/rank.ts:60
},
name: '排行榜',
maintainers: ['akynazh', 'AiraNadih'],
handler,
};
async function handler(ctx) {
const rankType = ctx.req.param('type');
let title;
let index;
if (rankType === 'weekly') {
title = '司机社综合周排行榜';
index = 0;
} else if (rankType === 'monthly') {
title = '司机社综合月排行榜';
index = 1;
} else {
throw new InvalidParameterError('Invalid rank type');
}
const context = await playwright();
const url = `${baseUrl}/portal.php`;
try {
const data = await playwrightGet(url, context, '.nex_recon_lists', {
cookie: config.xsijishe.cookie,
userAgent: config.xsijishe.userAgent,
});
const $ = load(data);
const items = $('.nex_recon_lists ul li')
.eq(index)
.find('.nex_recons_demens dl dd')
.toArray()
.map((item) => {
const $item = $(item);
const title = $item.find('h5').text().trim();
const link = $item.find('a').attr('href');View on GitHub (pinned to bed535e087)
Solutions
- Use 'weekly' or 'monthly'.
- Confirm the site still offers both boards by visiting the portal.php page; if it changed, update the if/else chain and the index mapping.
Defensive patterns
Strategy: validation
Validate before calling
const RANK_TYPES = { weekly: { title: '司机社综合周排行榜', index: 0 }, monthly: { title: '司机社综合月排行榜', index: 1 } } as const;
function resolveRankType(raw: string) {
if (!Object.hasOwn(RANK_TYPES, raw)) {
throw new InvalidParameterError(`Invalid rank type "${raw}". Use 'weekly' or 'monthly'.`);
}
return RANK_TYPES[raw as keyof typeof RANK_TYPES];
} Type guard
function isRankType(value: string): value is 'weekly' | 'monthly' {
return value === 'weekly' || value === 'monthly';
} Prevention
- Drive title+index from a single lookup table to keep them in sync.
- Document the two valid values in the route parameters options (already done).
When it happens
Trigger: A request to /xsijishe/rank/:type where type is not 'weekly' or 'monthly' (e.g. /xsijishe/rank/daily, /xsijishe/rank/yearly). Validated before launching Playwright, so no browser session is wasted.
Common situations: Caller assumed more granular timeframes exist; typo; integrator copied a type from another BBS route.
Related errors
- Invalid language parameter. Use "en" or "zh".
- Invalid category: ${category}. Please refer to the category
- Invalid type: ${type}. Supported types: ${Object.keys(typeMa
- Unknown region: ${region}
- Unknown category for ${region}: ${category}
AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12).
Data as JSON: /api/errors/45ea13e1b4d1d066.
Report an issue: GitHub.