Xaz*_*zzo 5 javascript node.js express firebase 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);
Run Code Online (Sandbox Code Playgroud)
在我的 firebase.json 中,我进行了重写:
"rewrites": [
{
"source": "/api/**",
"function": "api"
}
Run Code Online (Sandbox Code Playgroud)
所以理论上,如果我向https://api.mydomain/api/endpoint/userID发出 POST 请求应该执行该函数,但我得到:
无法 POST /api/endpoint/userID/
如果我使用默认的 firebase URL 访问像https://us-central1-my-proyect.cloudfunctions.net/api这样的函数,它工作正常。
您知道如何正确配置自定义域以使用我的功能吗?
非常感谢您的帮助!
当您使用 Express 应用程序作为 HTTPS 函数的目标时,该函数的名称会添加到托管 URL 的路径前面,就像您调用函数方向时一样。有两种方法可以弥补这一点:
将前缀路径放入您的路由路径中:
app.post('/api/endpoint/:userId', (req, res) => { ... })
Run Code Online (Sandbox Code Playgroud)创建第二个 Express 应用程序,用于路由 /api 下的所有内容,并将其发送到 Cloud Functions:
app.post('/endpoint/:userId', (req, res) => { ... })
const app2 = express()
app2.use('/api', app)
exports.api = functions.https.onRequest(app2)
Run Code Online (Sandbox Code Playgroud)无论哪种方式,当您重写/api/**function 的路径时api,您的函数都会被调用。
| 归档时间: |
|
| 查看次数: |
1406 次 |
| 最近记录: |