Firebase 嵌套和HTTP函数-CORS

Firebase 嵌套和HTTP函数-CORS,firebase,cors,google-cloud-functions,nestjs,Firebase,Cors,Google Cloud Functions,Nestjs,我试图利用Firebase HTTP函数的Nest,但从客户端调用时遇到了CORS错误 这是我以前的设置: declare const require: any const functions = require('firebase-functions') const cors = require('cors')({ origin: true }) const express = require('express') const app = express() app.use(cors) co

我试图利用Firebase HTTP函数的Nest,但从客户端调用时遇到了CORS错误

这是我以前的设置:

declare const require: any
const functions = require('firebase-functions')
const cors = require('cors')({ origin: true })
const express = require('express')

const app = express()
app.use(cors)
const cb = (req, res) => res.status(200).send('success')
app.use(cb)

export default functions.https.onRequest(app)
上面的工作很好(使用
allAuthenticatedUsers
设置了云函数调用器角色)

这是我使用Nest的新设置:

import * as functions from 'firebase-functions'
import { NestFactory } from '@nestjs/core'
import { ExpressAdapter } from '@nestjs/platform-express'
import { Api_Module } from './api.module'
import express from 'express'

const server = express()

const create_nest_server = async (express_instance: express.Express) => {
  const adaptor = new ExpressAdapter(express_instance)
  const app = await NestFactory.create(Api_Module, adaptor)
  app.enableCors({ origin: true })
  await app.init()
  return app
}


create_nest_server(server)
    .then(v => console.log('Nest Ready'))
    .catch(err => console.error('Nest broken', err))


export default functions.https.onRequest(server)
(来自)

这将产生
访问权,以便在'https://us-central1-.cloudfunctions.net/api-default/“起源”http://localhost:4200'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头。如果不透明响应满足您的需要,请将请求的模式设置为“无cors”,以获取禁用cors的资源。
在客户端上

我还尝试了其他一些方法,例如:

declare const require: any
const cors = require('cors')({ origin: true })

const server = express()
server.use(cors)
// ...the rest
以及:

以及:

以及在没有任何参数的情况下使用
app.enableCors()


非常感谢您的帮助。

假设您的客户端是Angular应用程序,如果您正在运行客户端的本地开发版本,您可以使用代理配置文件使您的请求看起来好像来自同一来源:

proxy.conf.json

{
    "/api-default": {
        "target": "https://us-central1-<project>.cloudfunctions.net",
        "logLevel": "debug"
    }
}

这会告诉客户端服务器允许提供的源代码。

Hi@skwny您能检查提供的解决方案并验证它是否对您有帮助吗?这似乎与您测试的方法不同。@gso_gabriel感谢您的链接,但这不是Firebase函数集成示例。我确实尝试在nest app boostrap期间使用
app.enableCors()
,如该链接所示,但不幸没有成功。请看。我认为这可能会有帮助。@Ajordat我已经看过那篇文章了,它也不是一个嵌套函数一个例子,它是一个使用JS的Firebase函数,这似乎是您所需要的。你查过那里的地图了吗?
  const nestApp = await NestFactory.create(AppModule, adapter, {
    logger: new CoreLogger(),
    cors: {
      origin: '*',
      methods: 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS',
      credentials: true,
      preflightContinue: false,
      optionsSuccessStatus: 204,
    },
  })
{
    "/api-default": {
        "target": "https://us-central1-<project>.cloudfunctions.net",
        "logLevel": "debug"
    }
}
@Post()
@Header('Access-Control-Allow-Origin', 'http://localhost:4200')
create() {
  return 'This action adds a new cat';
}