DIYgod/RSSHub · warning · Error

Unknown host: ${url.host}

Error message

Unknown host: ${url.host}

What it means

Thrown by the Maonan district government route inside a cache.tryGet callback when processing individual article links. After extracting article URLs from the list page, each link's URL host is checked in a switch statement. Only 'mp.weixin.qq.com' and 'www.maonan.gov.cn' have handlers. Any other host triggers this error.

Source

Thrown at lib/routes/gov/maonan/maonan.ts:154

                            case '/zcjdpt':
                                return {
                                    title: content('meta[name="ArticleTitle"]').attr('content')!,
                                    description: content('.wrap').html(),
                                    pubDate,
                                    link,
                                    author: content('meta[name="ContentSource"]').attr('content') === '本网' ? '茂名市茂南区人民政府网' : content('meta[name="ContentSource"]').attr('content'),
                                };
                            default:
                                return {
                                    title: content('.newsContainer_title').text(),
                                    description: content('.newsContainer_text').html(),
                                    pubDate,
                                    link,
                                    author: content('.author').text().trim() === '本网' ? '茂名市茂南区人民政府网' : content('.author').text().trim(),
                                };
                        }
                    default:
                        throw new Error(`Unknown host: ${url.host}`);
                }
            });
        })
    );

    return {
        title: `茂名市茂南区人民政府 - ${name}`,
        link: `${host}/${id}`,
        item: items,
    };
}

View on GitHub (pinned to bed535e087)

Solutions

  1. Inspect the article list page to identify what new hosts are appearing in links
  2. Add a new case to the switch statement in the cache.tryGet callback for the new host
  3. If the links are non-article navigation, tighten the list CSS selector to exclude them
  4. Consider making the error non-fatal by returning a partial item instead of throwing, to avoid breaking the entire feed

Example fix

// before
default:
    throw new Error(`Unknown host: ${url.host}`);

// after (graceful degradation — skip unknown hosts instead of failing the entire feed)
default:
    return {
        title: $item.text(),
        description: `Content from ${url.host} is not supported`,
        pubDate,
        link,
        author: url.host,
    };
Defensive patterns

Strategy: try-catch

Type guard

const SUPPORTED_HOSTS = new Set(['mp.weixin.qq.com', 'www.maonan.gov.cn']);
function isSupportedHost(url: URL): boolean {
    return SUPPORTED_HOSTS.has(url.host);
}

Try / catch

// Inside the Promise.all map, catch per-item errors instead of failing the feed:
const items = await Promise.all(
    list.map(async (i, item) => {
        try {
            // ... existing logic
        } catch (e) {
            if (e.message.includes('Unknown host')) {
                return null; // skip unsupported hosts gracefully
            }
            throw e;
        }
    })
);
const validItems = items.filter(Boolean);

Prevention

When it happens

Trigger: The article list page (www.maonan.gov.cn/{id}/) contains links whose host is neither mp.weixin.qq.com (WeChat articles) nor www.maonan.gov.cn (government site articles). This could be an external redirect, a CDN link, or a new subdomain. The error is thrown inside a Promise.all map, so it will reject the entire feed generation.

Common situations: The Maonan government site added links to a new domain or subdomain (e.g., a new content management system); external partner links appear in the article list; the list CSS selector matches unintended links (e.g., navigation links to other gov.cn subdomains).

Related errors


AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12). Data as JSON: /api/errors/e900aebd94a1a96d. Report an issue: GitHub.