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 - 未解析的函数/变量/方法