要解决Angular 8 + @angular/fire onCall函数没有CORS标头出现错误,您可以尝试以下解决方法:
在Firebase控制台中启用CORS:在Firebase控制台中,进入您的项目设置,然后找到Cloud Functions选项卡。在此选项卡中,您可以看到一个名为"CORS设置"的部分。确保启用了CORS,并将所需的域名添加到允许的域名列表中。
在Cloud Functions中添加CORS中间件:在您的Cloud Functions中,您可以添加一个自定义中间件来处理CORS。您可以在index.ts文件中使用cors库来实现这一点。首先,确保您已经安装了cors库:
npm install cors
然后,在您的index.ts文件中,添加以下代码:
import * as cors from 'cors';
// ...
const corsMiddleware = cors({ origin: true });
export const yourFunctionName = functions.https.onCall((data, context) => {
// ...
// 使用cors中间件处理CORS
return corsMiddleware(req, res, () => {
// 在这里处理您的函数逻辑
});
});
这将使用cors中间件处理CORS,并添加必要的CORS标头。
import { HttpClient, HttpHeaders } from '@angular/common/http';
// ...
const httpOptions = {
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': '*'
})
};
// 调用带有CORS标头的onCall函数
this.http.post('your-function-url', data, httpOptions).subscribe(response => {
// 处理返回的响应
});
请注意,这是一个示例代码,您需要将'your-function-url'替换为您实际的onCall函数的URL。
通过启用CORS,添加CORS中间件或在请求头中添加CORS标头,您应该能够解决Angular 8 + @angular/fire onCall函数没有CORS标头出现错误。