You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript Firebase云函数res.status()无法调用导致超时问题

解决Firebase V2 HTTP云函数中res.status()类型错误及超时问题

你的代码核心问题是变量名冲突:fetch回调中的res覆盖了外层云函数的响应对象res。内层的res是fetch返回的原生Response对象,它的status是只读数字属性,而非可调用方法——这就是触发Type 'Number' has no call signatures错误的原因,同时变量覆盖导致无法正确返回响应,最终引发函数超时。

修正后的代码

import * as logger from "firebase-functions/logger";
import { onRequest } from "firebase-functions/v2/https";
import fetch from "node-fetch";

exports.dailyShiftNotification = onRequest(async (req, res) => {
  try {
    // 将fetch返回的响应对象重命名为fetchRes,避免与外层res冲突
    const fetchRes = await fetch(`http://localhost:3000/api/messaging/dailyShiftNotification`, {
      method: 'POST',
    });

    if (!fetchRes.ok) {
      logger.error("发送消息时出现错误");
      return res.status(500).send('发送消息失败');
    }

    const result = await fetchRes.json();
    logger.log(result);
    return res.status(200).send('消息发送完成!');
  } catch (error) {
    logger.error('错误详情:', error);
    return res.status(500).send('发送消息失败');
  }
});

关键修改说明

  • 解决变量覆盖:把fetch回调里的res改为fetchRes,确保外层的云函数响应对象(Express Response类型)能正常调用status()方法。
  • 简化异步逻辑:用async/await替代嵌套then链,让错误处理更统一,代码可读性更高。
  • 规范导入方式:统一使用ES模块import语法,符合TypeScript开发规范,同时确保node-fetch正确导入。
  • 统一日志工具:用firebase-functions/logger替代console,适配Firebase云函数的日志系统,方便在控制台查看运行日志。

可选:添加类型定义

修正变量名后,你可以正常添加Express的类型定义来增强代码类型检查:

import { Request, Response } from "express";

exports.dailyShiftNotification = onRequest(async (req: Request, res: Response) => {
  // ... 代码内容
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:31:02