angular - AngularFireFunction 直接调用云函数
问题描述
我有一个 Angular 网站,我正在尝试将云功能集成为 Expressjs。只有云功能可以正常工作。当我访问 http://localhost:5001/project_id/us-central1/app 时,我可以看到控制台输出。但是对于角度来说,它不起作用。
这是尝试使用角度时的输出:
hosting: 127.0.0.1 - - [16/Nov/2020:18:57:01 +0000] "GET /favicon.ico HTTP/1.1" 200 4286 "http://localhost:5000/payment" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
函数/index.js:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log("Hello");
});
exports.app = functions.https.onRequest(app);
app.module.ts:
...
providers: [UserService, AngularFireAuthGuard,
{ provide: ORIGIN,useValue: 'http://localhost:5001' },
{ provide: REGION, useValue: 'us-central1' }],
...
firebase.json:
{
"hosting": {
"public": "dist/user",
"ignore": [
"firebase.json",
"**/node_modules/**"
],
"rewrites": [
{
"source": "**",
"function": "app",
"destination": "/index.html"
}
]
},
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"functions": {
"source": "functions"
}
}
payment.component.ts (我试图调用云函数):
constructor(private _fb: FormBuilder, private router: Router, private fns: AngularFireFunctions) {
const callable = fns.httpsCallable('app');
var data = callable({ name: 'some-data' });
data.subscribe(async res => {
console.log(res);
});
}
解决方案
您的客户端应用程序正在尝试调用可调用函数,但您的实际函数是由 express 应用程序支持的 HTTP 函数。这种组合是行不通的。如果要使用可调用函数,则必须遵循可调用函数文档中的说明并声明一个onCall
函数,而不是onRequest
. onRequest
用于正常的 HTTP 调用。从该文档中,请注意:
请务必记住,HTTPS 可调用函数与 HTTP 函数相似但不完全相同。要使用 HTTPS 可调用函数,您必须使用适用于您平台的客户端 SDK 以及 functions.https 后端 API(或实现协议)。可调用对象与 HTTP 函数有以下主要区别:
或者,如果您确实想在后端使用 express 应用,您将无法使用 Firebase Functions 客户端 SDK 调用它。为此,请使用普通的 HTTP 客户端库。
推荐阅读
- c++ - 函数返回右值引用是否有意义?
- python - ValueError: int() 以 10 为底的无效文字: '' Random Numbers Generator
- javascript - 如何使用 if 语句启动/停止和重置 setInterval 动画?
- selenium-webdriver - 我的 XML 文件似乎没有将值推送到我的代码中。导致我的测试被跳过
- java - 使用 JDBC setString() 在 Oracle 数据库中存储 CLOB 数据类型是否安全?
- java - C# 字典(顺序键)与 Java SortedMap 字典顺序
- javascript - 未评估值
- python - 图片在“detail_page”上传后损坏
- python - 如何根据 df 行中的值查找 df_s_t 中的值并将结果保存在 df['s_t'] 中?
- javascript - 在 vanilla JS 中定位下一个兄弟元素的父元素