Javascript 自定义域Firebase CloudFunctions API
我已经有了一个使用Firebase云函数的Express API,但我需要向其中添加自定义域。我随后使用Firebase主机为云函数创建了一个自定义域,并最终得到了以下Javascript 自定义域Firebase CloudFunctions API,javascript,firebase,google-cloud-platform,google-cloud-functions,firebase-hosting,Javascript,Firebase,Google Cloud Platform,Google Cloud Functions,Firebase Hosting,我已经有了一个使用Firebase云函数的Express API,但我需要向其中添加自定义域。我随后使用Firebase主机为云函数创建了一个自定义域,并最终得到了以下Firebase.json { "functions": { "predeploy": [ "npm --prefix \"$RESOURCE_DIR\" run lint", "npm --prefix
Firebase.json
{
"functions": {
"predeploy": [
"npm --prefix \"$RESOURCE_DIR\" run lint",
"npm --prefix \"$RESOURCE_DIR\" run build"
],
"source": "functions"
},
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"emulators": {
"functions": {
"port": 5001
},
"firestore": {
"port": 8080
},
"ui": {
"enabled": false
}
},
"hosting": [{
"site": "devbp",
"target:":"devbp",
"public": "public",
"rewrites": [
{
"source": "/api/**",
"function": "api"
}
]
}]
}
索引
导出-converter.ts
app.ts
问题是api内的端点不可访问,例如,GET devbp.web.app/api/user?id=123
,返回Cannot GET/api/user
。此响应表示Express正在处理请求(如果没有,则主机将抛出404页),但不是预期的
我相信我的firebase.json
中缺少了一些东西,因为如上所述,相同的api目前正在生产中
有什么想法吗?根据(以及)托管语法是:
"hosting": {
...
}
在显示的firebase.json
中,您有[{…}]
。
尝试删除方括号。我不确定是否遵循了逻辑,但是我在代码中的任何地方都看不到任何
新应用程序。如果我理解正确,如果您不创建新的应用程序
对象,您将不会运行它的构造函数,因此不会创建express应用程序
我认为的第二件事:)是,同样根据我的理解,当http GET requst调用GET请求时,应该调用方法
我发现这不是云函数,但是逻辑是相似的。创建了新的实例应用程序,并调用了get方法。请编辑问题,同时显示未按预期方式运行的功能代码。“我们应该有足够的信息来复制您所观察到的内容。”DougStevenson补充了一些文件,如果您需要其他信息,请告诉我。谢谢,我看不出您在哪里定义了应该按照预期处理请求的快速路线。我强烈建议将其归结为,删除尽可能多的不必要的代码。
import * as express from "express";
import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
export { express, functions, admin };
import * as cors from "cors";
import * as bodyParser from "body-parser";
import Routes from "./routes";
import { express } from "../../utils/exports-converter";
class App {
public express: express.Application;
constructor() {
this.express = express();
this.init();
this.mountRoutes();
}
private init() {
const corsOptions = { origin: true };
this.express.use(cors(corsOptions));
this.express.use(bodyParser.raw());
this.express.use(bodyParser.json());
this.express.use(bodyParser.urlencoded({ extended: true }));
}
private mountRoutes() {
Routes.mount(this.express);
}
}
"hosting": {
...
}