Firebase 函数无法识别 index.ts 之外的快速应用程序路由

Posted

技术标签:

【中文标题】Firebase 函数无法识别 index.ts 之外的快速应用程序路由【英文标题】:Firebase functions not recognizing express app routes outside of index.ts 【发布时间】:2020-04-22 00:17:10 【问题描述】:

我最近将一个 TypeScript 项目部署到 firebase-functions,其中包含 index.ts 中的所有内容。一切正常,但是当我开始重构我的代码时,我很快意识到 firebase 无法识别 index.ts 之外的文件(或您在 functions.https.onRequest() 中包装 express 应用程序的文件)中指定的路由。

我已经复制了以下问题:

//index.ts    
import * as functions from 'firebase-functions'; 
import * as express from "express";

export const expressApp = express();

expressApp.get("/hi", (req, res)=> 
   res.send("hi");
)

export const TestApp = functions.https.onRequest(expressApp);

添加"/hello" 路由的同一目录中的外部文件。

//external.ts
import  expressApp  from "./index";

expressApp.get("/hello", (req, res)=> 
    res.send("hello")
)

在我使用firebase-deploy 后,index.ts 中的"/hi" 路由有效,但 external.ts 中的"/hello" 路由无效(Cannot GET /hello)。

我的猜测是 TestApp 在被任何外部文件调用之前被导出到 firebase-functions。

有没有办法在 TypeScript 项目中解决这个问题?

【问题讨论】:

能否也显示 firebase.json 文件? 【参考方案1】:

当您启动项目时,index.ts 中的代码会被执行,但由于它根本没有引用 external.ts,因此该代码永远不会被执行。

您可以改为从index.ts 内部调用external.ts,然后通过传入您要修改的express 应用程序来调用它。

//index.ts    
import * as functions from 'firebase-functions'; 
import * as express from "express";
import attachRoutes: attachExternalRoutes from "./external";

export const expressApp = express();

expressApp.get("/hi", (req, res)=> 
   res.send("hi");
)

attachExternalRoutes(expressApp); // attaches routes in external

export const TestApp = functions.https.onRequest(expressApp);
//external.ts
export function attachRoutes(expressApp) 
  expressApp.get("/hello", (req, res)=> 
    res.send("hello")
  )

【讨论】:

是的!这很有意义。刚刚测试过它可以工作。谢谢你:)

以上是关于Firebase 函数无法识别 index.ts 之外的快速应用程序路由的主要内容,如果未能解决你的问题,请参考以下文章

firebase node.js/express.js 添加多个firebase函数

Firebase Cloud Functions TS - 未解析的函数/变量/方法

Firebase托管中无法识别角度材料

Firebase Functions Typescript - 使用 html 模板发送电子邮件

Swift 无法识别 Firebase 用户

Firebase 为发布请求提供“路径无法识别”错误