SDK Node.js สำหรับผู้ดูแลระบบเวอร์ชัน 10 มีการเปลี่ยนแปลงที่สำคัญ 2 อย่าง ดังนี้
- เราจะหยุดรองรับ Node.js 10 (นี่คือการเปลี่ยนแปลงที่ทำให้เกิดข้อขัดข้อง)
- SDK ใช้รูปแบบ API แบบแยกส่วน
คู่มือนี้มีวิธีการและข้อมูลที่จะช่วยให้นักพัฒนาแอปอัปเกรดแอป Node.js ที่มีอยู่จากAdmin SDKเวอร์ชันก่อนหน้าเป็นเวอร์ชัน 10
อัปเดต Node.js เป็น v12 ขึ้นไป
เมื่อเปิดตัว Admin Node.js SDK v10 แล้ว Firebase ได้หยุดการรองรับ Node.js 10 นักพัฒนาแอปต้องใช้ Node.js 12 ขึ้นไปเมื่อใช้ Admin SDK หากคุณใช้ Admin Node.js SDK ร่วมกับ Cloud Functions for Firebase โปรดตรวจสอบว่าคุณได้อัปเกรด Node.js เป็นเวอร์ชัน 12 ขึ้นไปแล้ว
ใช้โมดูลแทนเนมสเปซ
ตั้งแต่เริ่มก่อตั้ง Admin Node.js SDK ได้นำเสนอ API ที่เสถียรซึ่งมีโครงสร้าง เป็นลำดับชั้นของเนมสเปซที่ซ้อนกัน ด้วยเหตุนี้ คุณอาจคุ้นเคย กับการเขียนโค้ดที่มีลักษณะดังนี้
// Import the global admin namespace
import * as admin from 'firebase-admin';
const app: admin.app.App = admin.initializeApp();
const token: string = await admin.auth().createCustomToken('alice');
const user: admin.auth.UserRecord = await admin.auth().getUser('bob');
ตั้งแต่ v10 เป็นต้นไป Admin Node.js SDK จะมีจุดแรกเข้าของโมดูลหลายจุด
พร้อมการส่งออกที่มีชื่อ เราขอแนะนำให้นักพัฒนาแอปใช้จุดแรกเข้าใหม่เหล่านี้เพื่อ
เข้าถึง API ต่างๆ ของ SDK แทนการใช้admin
เนมสเปซส่วนกลาง
ตัวอย่างข้างต้นจะมีลักษณะดังนี้เมื่อใช้จุดแรกเข้าของโมดูลใหม่
TypeScript
// Import only what you need
import { initializeApp, App } from 'firebase-admin/app';
import { getAuth, UserRecord } from 'firebase-admin/auth';
const app: App = initializeApp();
const token: string = await getAuth().createCustomToken('alice');
const user: UserRecord = getAuth().getUser('bob');
Node.js
// Import only what you need
const { initializeApp } = require('firebase-admin/app');
const { getAuth } = require('firebase-admin/auth');
const app = initializeApp();
const token = await getAuth().createCustomToken('alice');
const user = getAuth().getUser('bob');
การใช้จุดแรกเข้าแบบแยกส่วน v10
โปรดทราบว่าในตัวอย่างข้างต้น คุณไม่ได้นำเข้าadmin
เนมสเปซส่วนกลางอีกต่อไป แต่คุณจะนำเข้าเฉพาะสัญลักษณ์ที่ต้องการจากจุดแรกเข้าของโมดูลหลายๆ โมดูลอย่างชัดเจนแทน นอกจากนี้ นักพัฒนา TypeScript ยังไม่ต้องใช้ตัวระบุประเภทที่ซ้อนกัน 3 ชั้น เช่น admin.auth.UserRecord และ
admin.database.Reference อีกด้วย เนื่องจากแต่ละประเภทอยู่ในโมดูลเดียว คุณจึง
นำเข้าได้โดยใช้ชื่อย่อ เช่น UserRecord และ Reference
ต่อไปนี้คือจุดแรกเข้าของโมดูลทั้งหมดที่มีใน SDK ณ v10
- firebase-admin/app
- firebase-admin/auth
- firebase-admin/database
- firebase-admin/firestore
- firebase-admin/instance-id
- firebase-admin/machine-learning
- firebase-admin/messaging
- firebase-admin/project-management
- firebase-admin/remote-config
- firebase-admin/security-rules
- firebase-admin/storage
ตารางต่อไปนี้แสดงไวยากรณ์การนำเข้าแทนที่สำหรับฟังก์ชันเนมสเปซเดิมแต่ละรายการ
| v9 | v10 |
|---|---|
admin.initializeApp()
|
import { initializeApp } from 'firebase-admin/app'
|
admin.app()
|
import { getApp } from 'firebase-admin/ap'
|
admin.credential.cert()
|
import { cert } from 'firebase-admin/app'
|
admin.auth()
|
import { getAuth } from 'firebase-admin/auth'
|
admin.database()
|
import { getDatabase } from 'firebase-admin/database'
|
admin.firestore()
|
import { getFirestore } from 'firebase-admin/firestore'
|
admin.instanceId()
|
import { getInstanceId } from 'firebase-admin/instance-id'
|
admin.machineLearning()
|
import { getMachineLearning } from 'firebase-admin/machine-learning'
|
admin.messaging()
|
import { getMessaging } from 'firebase-admin/messaging'
|
admin.projectManagement()
|
import { getProjectManagement } from 'firebase-admin/project-management'
|
admin.remoteConfig()
|
import { getRemoteConfig } from 'firebase-admin/remote-config'
|
admin.securityRules()
|
import { getSecurityRules } from 'firebase-admin/security-rules'
|
admin.storage()
|
import { getStorage } from 'firebase-admin/storage'
|
ใช้ฟังก์ชันที่ส่งออกแทนเมธอดใน App
ใน API เดิม ออบเจ็กต์ App จะแสดงเมธอดหลายอย่าง เช่น
app.auth() และ app.database() เราขอแนะนำให้นักพัฒนาแอปหลีกเลี่ยงการใช้วิธีการเหล่านี้
และใช้จุดแรกเข้าของโมดูลเดียวกันตามที่อธิบายไว้ข้างต้นแทน เพื่อรับอินสแตนซ์บริการที่กำหนดขอบเขตไว้สำหรับออบเจ็กต์ App ที่ระบุ และดำเนินการอื่นๆ ที่เฉพาะเจาะจงกับแอป
| v9 | v10 |
|---|---|
app.auth()
|
import { getAuth } from 'firebase-admin/auth';
|
app.database()
|
import { getDatabase } from 'firebase-admin/database';
|
app.database(url)
|
import { getDatabaseWithUrl } from 'firebase-admin/database';
|
app.firestore()
|
import { getFirestore } from 'firebase-admin/firestore'
|
app.instanceId()
|
import { getInstanceId } from 'firebase-admin/instance-id'
|
app.machineLearning()
|
import { getMachineLearning } from 'firebase-admin/machine-learning'
|
app.messaging()
|
import { getMessaging } from 'firebase-admin/messaging'
|
app.projectManagement()
|
import { getProjectManagement } from 'firebase-admin/project-management'
|
app.remoteConfig()
|
import { getRemoteConfig } from 'firebase-admin/remote-config'
|
app.securityRules()
|
import { getSecurityRules } from 'firebase-admin/security-rules'
|
app.storage()
|
import { getStorage } from 'firebase-admin/storage'
|
app.delete()
|
import { deleteApp } from 'firebase-admin/app';
|
การรองรับโมดูล ES
Node.js 12 ขึ้นไปมาพร้อมกับการรองรับโมดูล ES ในขั้นทดลอง ซึ่งช่วยให้นักพัฒนาซอฟต์แวร์ที่ไม่ใช่ TypeScript สามารถใช้คีย์เวิร์ด export และ import ในโค้ดของตนได้ ตั้งแต่การเปิดตัว v10 เป็นต้นไป Admin Node.js SDK ยังรองรับโมดูล ES ด้วย เพื่อให้นักพัฒนาแอปที่ใช้โมดูล ES ใน Node.js แบบธรรมดา
สามารถนำเข้า SDK โดยใช้ไวยากรณ์ import ได้
หากต้องการใช้โมดูล ES กับ Admin SDK ก่อนอื่นให้ตรวจสอบว่าคุณได้เปิดใช้การรองรับ ESM
สำหรับรันไทม์ Node.js แล้ว โดยปกติจะทําโดยการเพิ่มฟิลด์ "type":
"module" ลงในไฟล์ package.json จากนั้นคุณจะเขียนโค้ดของแอปพลิเคชัน
ที่มีลักษณะดังนี้ได้
// With {type: module} in the package.json...
// Import only what you need
import { initializeApp } from 'firebase-admin/app';
import { getAuth } from 'firebase-admin/auth';
const app = initializeApp();
const token = await getAuth().createCustomToken('alice');
const user = getAuth().getUser('bob');