คุณสามารถทริกเกอร์ฟังก์ชันผ่านคำขอ HTTP ได้โดยใช้
functions.https
ซึ่งช่วยให้คุณเรียกใช้ฟังก์ชันแบบซิงโครนัสผ่าน
เมธอด HTTP ที่รองรับต่อไปนี้ GET
, POST
, PUT
, DELETE
และ
OPTIONS
ตัวอย่างในหน้านี้อิงตาม
ฟังก์ชันตัวอย่าง
ที่ทริกเกอร์เมื่อคุณส่ง
คำขอ HTTP GET
ไปยังปลายทางของฟังก์ชัน ฟังก์ชันตัวอย่าง
ดึงเวลาของเซิร์ฟเวอร์ปัจจุบัน จัดรูปแบบเวลาตามที่ระบุในการค้นหา URL
และส่งผลลัพธ์ในการตอบกลับ HTTP
ทริกเกอร์ฟังก์ชันที่มีคำขอ HTTP
ใช้ functions.https
เพื่อสร้างฟังก์ชันที่จัดการ HTTP
กิจกรรม เครื่องจัดการเหตุการณ์สำหรับฟังก์ชัน HTTP จะรอฟังฟังก์ชัน
onRequest()
เหตุการณ์
ซึ่งรองรับเราเตอร์และแอปที่จัดการโดย
เฟรมเวิร์กเว็บ Express
การใช้ออบเจ็กต์คำขอและการตอบกลับ Express
ใช้เป็นอาร์กิวเมนต์สำหรับ onRequest()
ออบเจ็กต์ Request จะให้
คุณเข้าถึงพร็อพเพอร์ตี้ของคำขอ HTTP ที่ไคลเอ็นต์ส่ง และ
ออบเจ็กต์การตอบสนองช่วยให้คุณ
ส่งการตอบสนองกลับไปยังไคลเอ็นต์
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 ใช้งานได้แล้ว คุณจะเรียกใช้ผ่านคำขอที่ไม่ซ้ำได้ URL URL จะมีข้อมูลต่อไปนี้ตามลำดับ
- ภูมิภาค (หรือหลายภูมิภาค) ที่คุณทำให้ฟังก์ชันใช้งานได้ เวอร์ชันที่ใช้งานจริงบางส่วน อาจต้องตั้งค่าตำแหน่งอย่างชัดแจ้ง เพื่อลดเวลาในการตอบสนองของเครือข่าย
- รหัสโปรเจ็กต์ Firebase
cloudfunctions.net
- ชื่อฟังก์ชัน
ตัวอย่างเช่น URL ที่จะเรียกใช้ date()
มีลักษณะดังนี้
https://us-central1-<project-id>.cloudfunctions.net/date
หากคุณพบข้อผิดพลาดด้านสิทธิ์เมื่อทำให้ฟังก์ชันใช้งานได้ โปรดตรวจสอบว่า บทบาท IAM ที่เหมาะสมมีดังนี้ ที่มอบหมายให้กับผู้ใช้ที่เรียกใช้คำสั่งการติดตั้งใช้งาน
เมื่อใช้การกำหนดเส้นทางแอป Express ระบบจะเพิ่มชื่อฟังก์ชันเป็นคำนำหน้าเส้นทาง URL ไว้ในแอปที่คุณกำหนด ตัวอย่างเช่น URL ที่จะเรียกใช้ Getter ใน Express ตัวอย่างแอปด้านบนมีลักษณะดังนี้
https://us-central1-<project-id>.cloudfunctions.net/widgets/<id>
หากคุณเรียกใช้ฟังก์ชัน HTTP หลังไฟร์วอลล์หรือตัวกรอง IP คุณสามารถค้นหา ที่อยู่ IP ที่ Google ใช้เพื่อแสดงฟังก์ชัน HTTP
ใช้โมดูลมิดเดิลแวร์ด้วย Cloud Functions
หากคุณจำเป็นต้องแทรกทรัพยากร Dependency ของมิดเดิลแวร์สำหรับสิ่งต่างๆ เช่น การรองรับคุกกี้ หรือ CORS จะเรียกค่าเหล่านี้ภายในฟังก์ชัน เช่น หากต้องการเปิดใช้การรองรับ CORS ให้เพิ่ม บล็อกต่อไปนี้
// Enable CORS using the `cors` express middleware. cors(req, res, () => { // ... });
อ่านค่าจากคำขอ
ตารางต่อไปนี้แสดงสถานการณ์ที่พบบ่อยบางส่วนประเภทเนื้อหา | เนื้อความของคำขอ | พฤติกรรม |
---|---|---|
application/json |
'{"name":"John"}' |
request.body.name เท่ากับ "John" |
application/octet-stream |
"ข้อความของฉัน" | request.body เท่ากับ '6d792074657874' (ไบต์ดิบของคำขอ โปรดดูเอกสารบัฟเฟอร์ของ Node.js) |
text/plain |
"ข้อความของฉัน" | request.body เท่ากับ "ข้อความของฉัน" |
application/x-www-form-urlencoded |
"name=จอห์น" | request.body.name เท่ากับ "John" |
การแยกวิเคราะห์นี้ดำเนินการโดยโปรแกรมแยกวิเคราะห์เนื้อหาต่อไปนี้
- โปรแกรมแยกวิเคราะห์เนื้อหา JSON
- โปรแกรมแยกวิเคราะห์เนื้อหาดิบ
- โปรแกรมแยกวิเคราะห์เนื้อหาข้อความ
- โปรแกรมแยกวิเคราะห์เนื้อหาแบบฟอร์มที่เข้ารหัส URL
สมมติว่ามีการเรียกฟังก์ชันด้วยคำขอต่อไปนี้
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" YOUR_HTTP_TRIGGER_ENDPOINT?foo=baz -d '{"text":"something"}'
ข้อมูลที่ส่งจะปรากฏในรูปแบบต่อไปนี้
พร็อพเพอร์ตี้/วิธีการ | ค่า |
---|---|
req.method |
"โพสต์" |
req.get('x-myheader') |
"123" |
req.query.foo |
"Baz" |
req.body.text |
"บางอย่าง" |
req.rawBody |
ไบต์ดิบ (ไม่แยกวิเคราะห์) ของคำขอ |
ในตัวอย่างฟังก์ชัน date()
ฟังก์ชันนี้จะทดสอบทั้งพารามิเตอร์ของ URL และ
เนื้อความสำหรับค่า format
เพื่อกำหนดรูปแบบวันที่/เวลาที่จะใช้ ดังนี้
let format = req.query.format; format = req.body.format;
สิ้นสุดฟังก์ชัน HTTP
สิ้นสุดฟังก์ชัน HTTP ด้วย send()
, redirect()
, เสมอ
หรือ end()
มิฉะนั้น ฟังก์ชันอาจทำงานต่อและ
ถูกบังคับให้สิ้นสุดการใช้งานโดยระบบ ดูเพิ่มเติม
Sync, Async และ Promises
หลังจากเรียกข้อมูลและจัดรูปแบบเวลาของเซิร์ฟเวอร์โดยใช้ 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 สามารถพร็อกซีไปยังฟังก์ชัน HTTP ที่เฉพาะเจาะจงได้ ยัง ช่วยให้คุณใช้โดเมนที่กำหนดเองกับฟังก์ชัน HTTP ได้ ดูข้อมูลเพิ่มเติมเกี่ยวกับ การเชื่อมต่อ Cloud Functions กับโฮสติ้งของ Firebase