Admin Node.js SDK เวอร์ชัน 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');
ตั้งแต่เวอร์ชัน 10 เป็นต้นไป 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'
|
ใช้ฟังก์ชันที่ส่งออกแทนเมธอดในแอป
ใน 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');