【发布时间】:2020-04-14 19:43:30
【问题描述】:
我已经在 Firebase 上设置了托管,并按照 Google 提供的文档配置了我的 Node.js express 应用程序。包括正确的文件夹结构和命令行指令来初始化 firebase 和 firebase-functions。
文件夹结构:
Project
-- functions
-- node_modules
-- index.js
-- package.json
-- public
-- index.html
-- 404.html
.firebaserc
firebase.json
我已通过以下代码将 express 应用添加到 firebase 函数 http 请求:
// Set up endpoint
app.get('/api', (req, res) => {
res.json({
message: 'Welcome to the Line Prophet API. Good luck.'
})
});
/**
* Firebase cloud functions
*/
exports.app = functions.https.onRequest(app);
我的 Firebase.json 文件设置为将所有请求定向到应用目标:
{
"hosting": {
"public": "public",
"rewrites": [
{
"source": "**",
"destination": "app"
}
]
}
}
一旦我从我的父目录运行 firebase deploy 一切都会顺利,它说应用程序已部署:
但之后我导航到 https://line-prophet.web.app/api 并收到 404 page not found 错误。
我尝试使用 firebase serve 在本地运行它,但我遇到了同样的问题。这是短暂的工作,这就是为什么我觉得一切都设置正确,但是在再次部署后它已经坏了。任何提示表示赞赏。谢谢!
最新部署表明只有 4 个文件部署到 Firebase,这似乎非常少。我检查了 Functions 选项卡,我确实看到 "app" 在那里并且源代码是正确的。
【问题讨论】:
-
仅供参考:您不能在 Cloud Functions 中使用
app.listen。基础设施管理所有传入的套接字并将请求传递给您的函数(如果配置正确)。 -
@DougStevenson 我认为这可能是相关的。我已经评论了这条线,重新部署。遇到同样的问题,感谢您的提示。
-
您是否尝试将
"destination": "app"替换为"function": "index",为什么要使用app?它不是文件或路由,请参阅docs -
基本上就是这样,非常感谢。我从文档中获得了“目的地”,并且我使用的是应用程序,因为这是与 http 请求相关联的导出名称。我将其更改为“功能”:“应用程序”(而不是索引)并且有效。 @LawrenceCherone
-
很高兴它有帮助(这是在黑暗中拍摄).. 树木的选择太多;p
标签: javascript node.js firebase google-cloud-functions firebase-hosting