Phiên bản 10 của Admin Node.js SDK có 2 thay đổi quan trọng:
- Ngừng hỗ trợ Node.js 10 (đây là một thay đổi có thể gây lỗi)
- SDK đã áp dụng một mẫu API theo mô-đun
Hướng dẫn này cung cấp thông tin và hướng dẫn để giúp nhà phát triển nâng cấp các ứng dụng Node.js hiện có từ các phiên bản trước của Admin SDK lên phiên bản 10.
Cập nhật Node.js lên phiên bản 12 trở lên
Với bản phát hành Admin Node.js SDK phiên bản 10, Firebase đã ngừng hỗ trợ Node.js 10. Nhà phát triển phải sử dụng Node.js 12 trở lên khi dùng Admin SDK. Nếu bạn đang sử dụng Admin Node.js SDK cùng với Cloud Functions for Firebase, hãy nhớ nâng cấp phiên bản Node.js lên 12 trở lên.
Sử dụng mô-đun thay vì không gian tên
Kể từ khi ra mắt, Admin Node.js SDK đã cung cấp một API ổn định có cấu trúc dưới dạng một hệ thống phân cấp không gian tên lồng nhau. Do đó, bạn có thể đã quen với việc viết mã có dạng như sau:
// 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');
Kể từ phiên bản 10, Admin Node.js SDK cung cấp nhiều điểm truy cập mô-đun với các chế độ xuất được đặt tên. Nhà phát triển nên sử dụng các điểm truy cập mới này để truy cập vào nhiều API của SDK, thay vì sử dụng không gian tên admin
chung.
Sau đây là ví dụ trên với các điểm truy cập mô-đun mới:
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');
Sử dụng các điểm truy cập theo mô-đun phiên bản 10
Lưu ý rằng trong các ví dụ trên, bạn không còn nhập không gian tên admin
chung nữa. Thay vào đó, bạn chỉ nhập rõ ràng những biểu tượng cần thiết từ một số điểm truy cập mô-đun. Ngoài ra, nhà phát triển TypeScript không còn phải sử dụng các giá trị nhận dạng loại lồng nhau ba lần như admin.auth.UserRecord
và admin.database.Reference
nữa. Vì mỗi loại chỉ thuộc về một mô-đun, nên bạn chỉ cần nhập chúng bằng tên ngắn như UserRecord
và Reference
.
Dưới đây là tất cả các điểm truy cập mô-đun có trong SDK kể từ phiên bản 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
Bảng sau đây cho thấy cú pháp nhập thay thế cho từng hàm không gian tên cũ:
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'
|
Sử dụng các hàm đã xuất thay vì các phương thức trên App
Trong API cũ, đối tượng App
đã hiển thị một số phương thức như app.auth()
và app.database()
. Nhà phát triển nên tránh sử dụng các phương thức này và thay vào đó, hãy sử dụng các điểm truy cập mô-đun tương tự như mô tả ở trên để lấy các thực thể dịch vụ có phạm vi cho một đối tượng App
nhất định và thực hiện các tác vụ khác dành riêng cho ứng dụng.
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';
|
Hỗ trợ mô-đun ES
Node.js 12 trở lên có hỗ trợ thử nghiệm cho các mô-đun ES, cho phép ngay cả những nhà phát triển không phải TypeScript sử dụng các từ khoá export
và import
trong mã của họ. Kể từ phiên bản 10, Admin Node.js SDK cũng hỗ trợ các mô-đun ES, nhờ đó, những nhà phát triển triển khai các mô-đun ES trên Node.js thuần tuý có thể nhập SDK bằng cú pháp import
.
Để sử dụng các mô-đun ES với Admin SDK, trước tiên, hãy đảm bảo bạn đã bật tính năng hỗ trợ ESM cho thời gian chạy Node.js. Bạn thường thực hiện việc này bằng cách thêm trường "type":
"module"
vào tệp package.json
. Sau đó, bạn có thể viết mã ứng dụng có dạng như sau:
// 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');