javascript - 如何使用 Cloud Functions 的自定义域作为 POST 请求

标签 javascript node.js firebase express google-cloud-functions

我对 Node.js 不是很有经验,但学得很快,对 javaScript 非常有用。我正在使用 Cloud Functions 为项目创建 API,并尝试使用自定义域访问此 API。在我的 Firebase 主机上,我连接了一个子域“api.mydomain.com”。

我在使用 express 的函数 index.js 上有一个名为“api”的函数:

let express = require('express');
let app = express();

app.post('/endpoint/:userId', (req, res) => {

  ... EXECUTE CODE 

  res.json(json);  

});

exports.api = functions.https.onRequest(app);

在我的 firebase.json 中,我重写为:

    "rewrites": [
  {
    "source": "/api/**",
    "function": "api"
  }

所以理论上,如果我向 https://api.mydomain/api/endpoint/userID 发出 POST 请求应该执行函数,但我得到:

无法 POST/api/endpoint/userID/

如果我使用默认的 firebase URL 来访问类似 https://us-central1-my-proyect.cloudfunctions.net/api 的函数它工作正常。

您知道如何正确配置自定义域以使用我的功能吗?

非常感谢您的帮助!

最佳答案

当您使用 Express 应用作为 HTTPS 函数的目标时,函数的名称会添加到托管 URL 的路径前,就像调用函数方向时一样。有两种方法可以对此进行补偿:

  1. 将前缀路径放在您的路由路径中:

    app.post('/api/endpoint/:userId', (req, res) => { ... })
    
  2. 创建第二个 Express 应用,路由/api 下的所有内容,并将其发送到 Cloud Functions:

    app.post('/endpoint/:userId', (req, res) => { ... })
    const app2 = express()
    app2.use('/api', app)
    exports.api = functions.https.onRequest(app2)
    

无论哪种方式,当您将路径 /api/** 重写为函数 api 时,您的函数将被调用。

关于javascript - 如何使用 Cloud Functions 的自定义域作为 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47980911/

相关文章:

javascript - 解析服务器每个查询等待当前作业完成

javascript - 使用 key 更新 Firebase 数据,为什么要插入新对象

ios - 方法在操作中复制数组中的项目

javascript - 运行 SQL 查询,将响应对象作为数组返回。我需要知道如何创建循环来读取返回的每条记录

javascript - AngularJS ng-仅包含一次

javascript - 以编程方式更改正在显示的 react 组件

javascript - 如何获取从匹配条件返回的 jQuery 元素的数量?

mysql - 如何让UI实时更新

c++ - NodeJS : Native c++ module with multi-threading (openmp)

python - 如何将React Native应用程序连接到Python?