Admin Node.js SDK เวอร์ชัน 10 มีการเปลี่ยนแปลงที่สำคัญ 2 ประการ ดังนี้
- หยุดรองรับ Node.js 10 แล้ว (เป็นการเปลี่ยนแปลงที่ส่งผลกับส่วนอื่นในระบบ)
- SDK ได้นำรูปแบบ API แบบแยกส่วนมาใช้
คู่มือนี้จะแสดงวิธีการและข้อมูลเพื่อช่วยนักพัฒนาแอปอัปเกรดแอป Node.js ที่มีอยู่จาก Admin SDK เวอร์ชันเก่าเป็น v10
อัปเดต Node.js เป็น v12 ขึ้นไป
Firebase ได้หยุดรองรับ Node.js 10 แล้วเมื่อมีการเปิดตัว Admin Node.js SDK v10 นักพัฒนาแอปต้องใช้ 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
เนมสเปซadmin
ส่วนกลางอีกต่อไป แต่คุณจะนําเข้าเฉพาะสัญลักษณ์ที่ต้องการจากจุดเข้าใช้งานของโมดูลหลายจุดแทน นอกจากนี้ นักพัฒนาซอฟต์แวร์ TypeScript ไม่จำเป็นต้องใช้ตัวระบุประเภทที่ซ้อนกัน 3 ประเภท เช่น admin.auth.UserRecord
และ admin.database.Reference
อีกต่อไป เนื่องจากแต่ละประเภทอยู่ในโมดูลเดียวเท่านั้น คุณจึงนำเข้าได้โดยใช้ชื่อย่อ เช่น UserRecord
และ Reference
นี่คือจุดแรกเข้าของโมดูลทั้งหมดที่มีใน SDK เวอร์ชัน 10
- firebase-admin/app
- Firebase-ผู้ดูแลระบบ/การตรวจสอบสิทธิ์
- 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/กฎความปลอดภัย
- 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');