【问题标题】:Firebase Hosting can't find Express EndpointsFirebase 托管找不到 Express Endpoints
【发布时间】: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


【解决方案1】:

感谢@LawrenceCherone 将 firebase.json 文件更改为:

"rewrites": [
      {
        "source": "**",
        "function": "app"
      }
    ]

解决了我的问题。由于在线文档,我使用的是目标而不是函数,但是将所有请求定向到您设置的用于处理 http 请求的函数更有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-09
    • 2019-01-16
    • 2018-08-07
    • 2021-05-07
    • 1970-01-01
    • 2020-09-06
    • 2019-01-10
    • 2019-06-13
    相关资源
    最近更新 更多