2016-02-29 122 views
10

我刚刚完成的Hello World谷歌云功能教程,并收到以下响应头:谷歌云功能启用CORS?

Connection → keep-alive 
Content-Length → 14 
Content-Type → text/plain; charset=utf-8 
Date → Mon, 29 Feb 2016 07:02:37 GMT 
Execution-Id → XbT-WC9lXKL-0 
Server → nginx 

我如何可以添加CORS标头,以便能够从我的网站打电话给我的功能?

回答

20

在这里我们去:

exports.helloWorld = function helloWorld(req, res) { 
    res.set('Access-Control-Allow-Origin', "*") 
    res.set('Access-Control-Allow-Methods', 'GET, POST') 
    res.status(200).send('weeee!); 
}; 

那么你可以jQuery的/不管它像往常一样:

$.get(myUrl, (r) => console.log(r)) 
+1

我已经尝试了上述实现,但我收到:请求头字段X-Requested-With在预检响应中不被Access-Control-Allow-Headers所允许。任何建议? – florin

+0

尝试添加res.set('Access-Control-Allow-Headers','Content Type','X-Requested-Width','...')发送回应之前 –

8

我是Google Cloud Functions的产品经理。感谢您的问题,这是一个受欢迎的要求。

我们尚未公布任何内容,但我们知道需要对云功能的HTTP调用功能进行一些增强,我们将对此和其他许多方面进行改进在未来的迭代中。

UPDATE:

我们改善你处理云功能HTTP的方式。您现在可以完全访问HTTP请求/响应对象,因此您可以设置适当的CORS头并响应飞行前选项请求(https://cloud.google.com/functions/docs/writing/http

+11

提供(https://cloud.google.com/functions/docs/writing/http)链接没有提及任何CORS 。有没有官方文档可以看?我希望能有一个用户界面来改变这些设置(a la aws),但似乎没有。 – Ryan

0

您可以使用CORS express中间件。

的package.json

npm install express --save 
npm install cors --save 

index.js

'use strict'; 

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

app.use(cors); 
app.get('*', (req, res) => { 
    res.send(`Hello, world`); 
}); 

exports.hello = functions.https.onRequest(app); 
3

我刚刚创建了webfunc。它是一个轻量级的HTTP服务器,支持CORS以及Google Cloud Functions的路由。例如:

const { serveHttp, app } = require('webfunc') 

exports.yourapp = serveHttp([ 
    app.get('/', (req, res) => res.status(200).send('Hello World')), 
    app.get('/users/{userId}', (req, res, params) => res.status(200).send(`Hello user ${params.userId}`)), 
    app.get('/users/{userId}/document/{docName}', (req, res, params) => res.status(200).send(`Hello user ${params.userId}. I like your document ${params.docName}`)), 
]) 

在项目的根,只需添加一个appconfig.json,看起来像这样:

{ 
    "headers": { 
    "Access-Control-Allow-Methods": "GET, HEAD, OPTIONS, POST", 
    "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept", 
    "Access-Control-Allow-Origin": "*", 
    "Access-Control-Max-Age": "1296000" 
    } 
} 

希望这有助于。