SDK Node.js สำหรับผู้ดูแลระบบเวอร์ชัน 10 มีการเปลี่ยนแปลงที่สำคัญ 2 อย่าง ดังนี้
- หยุดรองรับ Node.js 10 แล้ว (นี่คือการเปลี่ยนแปลงที่ไม่รองรับการทำงานย้อนหลัง)
- SDK ใช้รูปแบบ API แบบแยกส่วน
คู่มือนี้มีวิธีการและข้อมูลที่จะช่วยให้นักพัฒนาแอปอัปเกรดแอป Node.js ที่มีอยู่จากAdmin SDKเวอร์ชันก่อนหน้าเป็น v10
อัปเดต 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 ณ เวอร์ชัน 10
- 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');