คุณทริกเกอร์ฟังก์ชันผ่านคำขอ HTTP ได้โดยใช้
functions.https
ซึ่งจะช่วยให้คุณเรียกใช้ฟังก์ชันแบบซิงโครนัสผ่านเมธอด HTTP ที่รองรับต่อไปนี้ได้ GET
, POST
, PUT
, DELETE
และ OPTIONS
ตัวอย่างในหน้านี้อิงตามฟังก์ชันตัวอย่าง
ที่ทริกเกอร์เมื่อคุณส่ง
คำขอ HTTP GET
ไปยังปลายทางของฟังก์ชัน ฟังก์ชันตัวอย่าง
จะดึงเวลาปัจจุบันของเซิร์ฟเวอร์ จัดรูปแบบเวลาตามที่ระบุไว้ในพารามิเตอร์การค้นหาของ URL
และส่งผลลัพธ์ในการตอบกลับ HTTP
ทริกเกอร์ฟังก์ชันด้วยคำขอ HTTP
ใช้ functions.https
เพื่อสร้างฟังก์ชันที่จัดการเหตุการณ์ HTTP
ตัวแฮนเดิลเหตุการณ์สำหรับฟังก์ชัน HTTP จะรอรับเหตุการณ์ onRequest()
ซึ่งรองรับเราเตอร์และแอปที่จัดการโดย
เฟรมเวิร์กเว็บ Express
การใช้ออบเจ็กต์คำขอและการตอบกลับของ Express
ออบเจ็กต์ Request ซึ่งใช้เป็นอาร์กิวเมนต์สำหรับ onRequest()
จะให้สิทธิ์เข้าถึงพร็อพเพอร์ตี้ของคำขอ HTTP ที่ไคลเอ็นต์ส่ง และออบเจ็กต์ Response จะให้วิธีส่งการตอบกลับไปยังไคลเอ็นต์
exports.date = functions.https.onRequest((req, res) => { // ... });
การใช้แอป Express ที่มีอยู่
การใช้ App เป็นอาร์กิวเมนต์สำหรับ
onRequest()
คุณจะ
ส่งแอป Express แบบเต็มไปยังฟังก์ชัน HTTP ได้ คุณย้ายโค้ด Boilerplate
ไปยังมิดเดิลแวร์ได้ดังที่แสดง
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
หากต้องการแทรกการอ้างอิงของมิดเดิลแวร์สำหรับสิ่งต่างๆ เช่น การรองรับคุกกี้หรือ 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=John' | request.body.name เท่ากับ "สมชาย" |
การแยกวิเคราะห์นี้ดำเนินการโดยตัวแยกวิเคราะห์เนื้อหาต่อไปนี้
- โปรแกรมแยกวิเคราะห์เนื้อหา 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 |
"POST" |
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 Hosting
คุณเชื่อมต่อฟังก์ชัน HTTP กับ Firebase Hosting ได้ คำขอในFirebase Hostingเว็บไซต์ของคุณสามารถพร็อกซีไปยังฟังก์ชัน HTTP ที่เฉพาะเจาะจงได้ นอกจากนี้ยัง ช่วยให้คุณใช้โดเมนที่กำหนดเองกับฟังก์ชัน HTTP ได้ด้วย ดูข้อมูลเพิ่มเติมเกี่ยวกับ การเชื่อมต่อ Cloud Functions กับ Firebase Hosting