You need to enable JavaScript to run this app. Firebase Functions爬虫端点服务端返回空对象本地运行正常问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Functions爬虫端点服务端返回空对象本地运行正常问题咨询

核心原因分析
  1. Firebase Spark免费计划限制:Spark计划的云函数默认禁止发起对非Google服务的第三方出站请求,本地运行不受该限制,部署后请求直接被平台拦截返回503,这是最常见的触发原因。
  2. 目标站点反爬拦截:tracemycode.com封禁了Firebase Functions的出口IP段,本地IP未被拦截所以可以正常访问,部署后请求被目标站返回503拒绝。
  3. 代码异常被吞:你在getLatesCryptoNews的catch块中仅打印日志,没有抛出错误,请求失败后函数会返回undefined,外层Promise仍为resolved状态,所以会进入then分支打印News arrived日志,最终返回{data: undefined}的空响应,你看不到爬取相关的日志是因为请求直接失败,没有进入Axios响应后的处理逻辑。
排查解决步骤
  • 第一步:确认Firebase付费方案
    登录Firebase控制台查看当前项目的付费计划,如果是Spark免费计划,升级到Blaze随用随付计划即可解除第三方出站请求限制,Blaze计划有免费额度,正常低频率调用不会产生费用。
  • 第二步:修复代码异常吞吃问题
    修改cryptoNews.js的catch块,捕获错误后显式抛出,让外层路由可以正确识别请求失败,同时补全所有返回分支,避免无返回值的情况:
    async function getLatesCryptoNews() {
        try {
            const response = await axios({
                method: 'get',
                url: `https://tracemycode.com/`,
                // 添加浏览器请求头避免反爬拦截
                headers: {
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
                }
            });
            const dom = new JSDOM(response.data);
            const document = dom.window.document;
            const posts = document.querySelectorAll("div.news-posts");
            if (posts.length === 0) return []; // 空结果显式返回空数组
            const data = [];
            posts.forEach(item => {
                const time = item.querySelector('div.news-post-time p')?.textContent || '';
                const title = item.querySelector('div.news-post-title h1')?.textContent || '';
                data.push({
                    title,
                    time: time.substring(1, time.length - 1)
                });
            });
            return data; // async函数直接返回值即可,无需套Promise.resolve
        } catch (err) {
            console.error("爬取错误:", err);
            throw err;
        }
    }
    
  • 第三步:验证依赖配置
    确认package.json的dependencies中包含jsdom和axios,不要仅放在devDependencies中,部署时Firebase不会安装dev依赖,会导致模块加载失败。
  • 第四步:反爬绕过验证
    如果升级计划后仍然返回503,可以在Axios请求中添加更多浏览器请求头(如Cookie、Referer),或者配置代理池规避IP封禁。

内容的提问来源于stack exchange,提问作者Musthafa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 12:36:01