Class 09: File Upload & Configuration
Cấu hình NestJS với @nestjs/config
@nestjs/config giúp quản lý biến môi trường (environment variables) và cấu hình dự án một cách linh hoạt.
Cài đặt
npm install @nestjs/configTạo file .env ở thư mục gốc dự án
.env ở thư mục gốc dự ánPORT=3000
UPLOAD_DIR=./public/uploadsCấu hình ConfigModule trong app.module.ts
ConfigModule trong app.module.tsimport { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true, // cho phép sử dụng config ở toàn bộ module
}),
],
})
export class AppModule {}Upload file với Multer (ảnh đại diện người dùng)
NestJS tích hợp Multer để xử lý upload file multipart/form-data rất tiện lợi qua FileInterceptor.
Cài đặt platform-express
Tạo controller xử lý upload ảnh đại diện
Xử lý lưu trữ file tạm trong thư mục static
Để truy cập được file upload từ trình duyệt, ta cần cấu hình serve thư mục public làm static.
Cài đặt ServeStaticModule
Cấu hình ServeStaticModule trong app.module.ts
ServeStaticModule trong app.module.tsGiải thích chi tiết
@nestjs/config: Đọc biến môi trường, tránh hardcode cấu hình, dễ thay đổi môi trường khác nhau.
FileInterceptor: Middleware xử lý file upload, nhận key form data
avatar.diskStorage: Thiết lập thư mục lưu và tên file lưu.
fileFilter: Lọc file theo định dạng, đảm bảo chỉ ảnh hợp lệ được upload.
limits: Giới hạn kích thước file upload.
ServeStaticModule: Cho phép truy cập file upload qua URL, phục vụ file tĩnh.
Bài tập thực hành cho học viên
Tạo file
.envvớiUPLOAD_DIR=./public/uploads.Cài đặt và cấu hình
@nestjs/configtheo hướng dẫn.Tạo controller với route POST
/users/upload-avatarđể upload file ảnh đại diện.Giới hạn file upload chỉ nhận
jpg, jpeg, png, kích thước tối đa 2MB.Lưu file vào thư mục public/uploads theo cấu hình.
Cấu hình serve static thư mục
publicđể truy cập file upload qua URL.Sử dụng Postman hoặc frontend test upload file.
Kiểm tra upload thành công, trả về URL file, truy cập URL ảnh trên trình duyệt.
Thử upload file không phải ảnh hoặc quá lớn để kiểm tra lỗi.
Last updated