2016-02-29 37 views
10

Tôi vừa hoàn thành các Hello World Google Cloud Chức năng hướng dẫn và nhận các tiêu đề phản ứng sau:Google Cloud Functions bật 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 

Làm thế nào tôi có thể thêm tiêu đề CORS để có thể gọi hàm của tôi từ trang web của tôi?

Trả lời

20

ở đây chúng tôi đi:

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!); 
}; 

sau đó bạn có thể jquery/bất cứ điều gì như thường lệ:

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

Tôi đã thử thực hiện ở trên nhưng tôi nhận được: Trường tiêu đề yêu cầu X-Requested-With không được Access-Control-Allow-Headers cho phép trong phản hồi preflight. Bất kì lời đề nghị nào? – florin

+0

thử thêm res.set ('Access-Control-Allow-Headers', 'Content Type', 'X-Requested-Width', '...') trước khi gửi phản hồi –

8

Tôi là người quản lý sản phẩm cho Google Cloud Functions. Cảm ơn câu hỏi của bạn, đây là một yêu cầu phổ biến.

Chúng tôi chưa có thông báo nào, nhưng chúng tôi biết một số cải tiến cần được thực hiện đối với khả năng gọi hàm của Chức năng đám mây HTTP và chúng tôi sẽ triển khai các cải tiến này và nhiều lĩnh vực khác trong các lần lặp lại trong tương lai.

CẬP NHẬT:

Chúng tôi đã cải thiện cách bạn xử lý HTTP trong chức năng đám mây. Bây giờ bạn có quyền truy cập đầy đủ vào các đối tượng HTTP Request/Response để có thể thiết lập các tiêu đề CORS thích hợp và đáp ứng các yêu cầu OPTIONS trước chuyến bay (https://cloud.google.com/functions/docs/writing/http)

+11

Các liên kết được cung cấp (https://cloud.google.com/functions/docs/writing/http) không đề cập đến bất cứ điều gì về CORS . Có tài liệu chính thức nào để xem không? Tôi đã hy vọng sẽ có một giao diện người dùng để thay đổi các thiết lập này (a la aws) nhưng dường như không có. – Ryan

0

Bạn có thể sử dụng phần mềm trung gian thể hiện của CORS.

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

Tôi vừa tạo webfunc. Đó là một máy chủ HTTP nhẹ hỗ trợ CORS cũng như định tuyến cho Google Cloud Functions. Ví dụ:

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}`)), 
]) 

Trong thư mục gốc của dự án của bạn, chỉ cần thêm một appconfig.json trông như thế này:

{ 
    "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" 
    } 
} 

Hope this helps.