透過 HTTP 要求呼叫函式


您可以使用 functions.https。這讓您可以透過 支援的 HTTP 方法如下:GETPOSTPUTDELETEOPTIONS

本頁的範例是 函式範例 以便在 Gmail 傳送 對函式端點發出 HTTP GET 要求。範例函式 擷取目前的伺服器時間,將網址查詢中指定的時間格式化 參數,並在 HTTP 回應中傳送結果。

透過 HTTP 要求觸發函式

使用 functions.https 建立可處理 HTTP 事件。HTTP 函式的事件處理常式會監聽 onRequest() 事件, 支援路由器和應用程式 Express 網路架構。

使用 Express 要求和回應物件

做為 onRequest() 的引數 Request 物件 您可以存取用戶端所傳送 HTTP 要求的屬性, Response 物件可讓您 則回傳回應給用戶端。

exports.date = functions.https.onRequest((req, res) => {
  // ...
});

使用現有的 Express 應用程式

使用 App 做為 onRequest(),您可以 並將完整的 Express 應用程式傳遞至 HTTP 函式。可移動樣板程式碼 連結至中介軟體,如圖所示:

const express = require('express');
const cors = require('cors');

const app = express();

// Automatically allow cross-origin requests
app.use(cors({ origin: true }));

// Add middleware to authenticate requests
app.use(myMiddleware);

// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));

// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);

叫用 HTTP 函式

部署 HTTP 函式後,您可以透過 網址。網址依序包含下列內容:

  • 您部署函式的區域。部分正式環境 函式可能需要明確設定 location 盡可能縮短網路延遲時間
  • 您的 Firebase 專案 ID
  • cloudfunctions.net
  • 函式名稱

舉例來說,叫用 date() 的網址看起來會像這樣:

https://us-central1-<project-id>.cloudfunctions.net/date

如果您在部署函式時遇到權限錯誤,請確認 您可以查看適當的身分與存取權管理角色 執行部署指令的使用者

使用 Express 應用程式轉送功能時,函式名稱會以前置字串的形式新增至網址路徑 在您定義的應用程式中例如,在 Express 中叫用 getter 的網址 上方的應用程式範例如下:

https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>

如果要在防火牆或 IP 篩選器後方叫用 HTTP 函式: 你可以查詢 Google 用於提供 HTTP 函式的 IP 位址。

將中介軟體模組與 Cloud Functions 搭配使用

如果您需要插入用於 Cookie 支援或用途的中介軟體依附元件 CORS,請在函式中呼叫這些變數。舉例來說,如要啟用 CORS 支援,請將 以下區塊:

// Enable CORS using the `cors` express middleware.
cors(req, res, () => {
  // ...
});

讀取要求中的值

下表列出一些常見情況:

內容類型 要求內容 行為
application/json '{"name":"John"}' request.body.name 等於「大明」
application/octet-stream 我的文字 request.body 等於 '6d792074657874'(要求的原始位元組,請參閱 Node.js 緩衝區說明文件)。
text/plain 我的文字 request.body等於「我的文字」
application/x-www-form-urlencoded 「name=大明」 request.body.name 等於「大明」

這項剖析作業是由下列主體剖析器完成:

假設使用下列要求呼叫函式:

curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'

那麼傳送的資料則會依照下方定義進行具體化:

屬性/方法
req.method 「POST」
req.get('x-myheader') 「123」
req.query.foo 「baz」
req.body.text 「某個東西」
req.rawBody 要求的原始 (未剖析) 位元組

date() 函式範例中,函式會測試網址參數和 format 值的主體,來設定要使用的日期/時間格式:

let format = req.query.format;
format = req.body.format;

終止 HTTP 函式

一律結尾為 HTTP 函式 send()redirect()。 或 end()。否則,您的函式可能會繼續執行,且 遭到系統強制終止其他參考資訊 同步處理、非同步和 Promise

使用 Node.js 擷取伺服器時間並格式化後 moment 模組,date() 函式 方法是將結果傳送至 HTTP 回應:

const formattedDate = moment().format(`${format}`);
functions.logger.log('Sending Formatted date:', formattedDate);
res.status(200).send(formattedDate);

將 HTTP 函式連結至 Firebase 託管

您可以將 HTTP 函式連結至 Firebase 託管。要求: Firebase 託管網站可經由 Proxy 處理至特定 HTTP 函式。這也 可讓您透過 HTTP 函式使用自己的自訂網域。進一步瞭解 將 Cloud Functions 連線至 Firebase 託管