Tài liệu này được dịch bởi AI. Đối với bất kỳ thông tin không chính xác nào, vui lòng tham khảo phiên bản tiếng Anh
Trong quá trình phát triển và cập nhật các plugin của NocoBase, cấu trúc cơ sở dữ liệu hoặc cấu hình của plugin có thể có những thay đổi không tương thích. Để đảm bảo quá trình nâng cấp diễn ra suôn sẻ, NocoBase cung cấp cơ chế Migration (di chuyển dữ liệu), cho phép bạn xử lý các thay đổi này bằng cách viết các tệp migration. Bài viết này sẽ hướng dẫn bạn tìm hiểu một cách có hệ thống về cách sử dụng và quy trình phát triển Migration.
Migration là một script tự động thực thi trong quá trình nâng cấp plugin, được sử dụng để giải quyết các vấn đề sau:
Thời điểm thực thi Migration được chia thành ba loại:
| Loại | Thời điểm kích hoạt | Kịch bản thực thi |
|---|---|---|
beforeLoad | Trước khi tất cả cấu hình plugin được tải | |
afterSync | Sau khi cấu hình bộ sưu tập được đồng bộ hóa với cơ sở dữ liệu (cấu trúc bảng đã thay đổi) | |
afterLoad | Sau khi tất cả cấu hình plugin được tải |
Các tệp Migration nên được đặt trong thư mục src/server/migrations/*.ts của plugin. NocoBase cung cấp lệnh create-migration để nhanh chóng tạo các tệp migration.
Tham số tùy chọn
| Tham số | Mô tả |
|---|---|
--pkg <pkg> | Chỉ định tên gói plugin |
--on [on] | Chỉ định thời điểm thực thi, các tùy chọn: beforeLoad, afterSync, afterLoad |
Ví dụ
Đường dẫn tệp migration được tạo như sau:
Nội dung ban đầu của tệp:
⚠️
appVersionđược sử dụng để xác định phiên bản mà quá trình nâng cấp hướng tới. Các môi trường có phiên bản nhỏ hơn phiên bản được chỉ định sẽ thực thi migration này.
Trong các tệp Migration, bạn có thể truy cập các thuộc tính và API phổ biến sau thông qua this để thuận tiện thao tác với cơ sở dữ liệu, plugin và các thể hiện ứng dụng:
Các thuộc tính phổ biến
this.app
Thể hiện ứng dụng NocoBase hiện tại. Có thể được sử dụng để truy cập các dịch vụ toàn cục, plugin hoặc cấu hình.
this.db
Thể hiện dịch vụ cơ sở dữ liệu, cung cấp các giao diện để thao tác với các mô hình (bộ sưu tập).
this.plugin
Thể hiện plugin hiện tại, có thể được sử dụng để truy cập các phương thức tùy chỉnh của plugin.
this.sequelize
Thể hiện Sequelize, có thể trực tiếp thực thi SQL thô hoặc các thao tác giao dịch.
this.queryInterface
QueryInterface của Sequelize, thường được sử dụng để sửa đổi cấu trúc bảng, ví dụ như thêm trường, xóa bảng, v.v.
Ví dụ về cách viết Migration
Ngoài các thuộc tính phổ biến được liệt kê ở trên, Migration còn cung cấp nhiều API phong phú. Để biết tài liệu chi tiết, vui lòng tham khảo Migration API.
Việc thực thi Migration được kích hoạt bởi lệnh nocobase upgrade:
Trong quá trình nâng cấp, hệ thống sẽ xác định thứ tự thực thi dựa trên loại Migration và appVersion.
Trong quá trình phát triển plugin, bạn nên sử dụng Mock Server để kiểm thử xem migration có thực thi đúng cách hay không, nhằm tránh làm hỏng dữ liệu thật.
Tip: Sử dụng Mock Server có thể nhanh chóng mô phỏng các kịch bản nâng cấp và xác minh thứ tự thực thi Migration cũng như các thay đổi dữ liệu.
beforeLoad, afterSync hoặc afterLoad dựa trên đối tượng thao tác, tránh phụ thuộc vào các module chưa được tải.appVersion để chỉ rõ phiên bản mà migration áp dụng, nhằm ngăn chặn việc thực thi lặp lại.