Ứng dụng web quản lý thư viện được xây dựng với Node.js, Express, MongoDB và Pug template engine. Hỗ trợ quản lý sách, danh mục, người dùng và phiếu mượn/trả sách.
| Công nghệ | Phiên bản | Mô tả |
|---|---|---|
| Node.js | — | Runtime JavaScript phía server |
| Express | 5.x | Web framework |
| MongoDB | Atlas | Cơ sở dữ liệu NoSQL |
| Mongoose | 9.x | ODM cho MongoDB |
| Pug | 3.x | Template engine |
| JWT | — | Xác thực người dùng |
| bcryptjs | — | Mã hóa mật khẩu |
| Bootstrap | 5.3 | CSS framework |
quan-ly-thu-vien/
├── index.js # Entry point - khởi động server Express
├── package.json
├── .env # Biến môi trường (PORT, MONGODB_URI, JWT_SECRET)
├── .gitignore
│
├── config/
│ ├── database.js # Kết nối MongoDB Atlas
│ └── system.js # Cấu hình hệ thống (prefix admin)
│
├── models/
│ ├── Book.js # Model Sách
│ ├── Category.js # Model Danh mục
│ ├── User.js # Model Người dùng
│ └── borrowRecord.js # Model Phiếu mượn sách
│
├── controllers/
│ ├── admin/ # Controllers trang quản trị
│ │ ├── books.controller.js # CRUD sách
│ │ ├── borrows.controller.js # Quản lý mượn/trả
│ │ ├── categories.controller.js # CRUD danh mục
│ │ ├── dashboard.controller.js # Trang tổng quan
│ │ └── users.controller.js # Quản lý người dùng
│ └── client/ # Controllers trang người dùng
│ ├── books.controller.js # Xem sách
│ ├── borrows.controller.js # Mượn sách, lịch sử
│ ├── home.controller.js # Trang chủ
│ └── users.controller.js # Đăng ký, đăng nhập, đổi mật khẩu
│
├── routes/
│ ├── admin/ # Routes quản trị (/admin/...)
│ │ ├── index.routes.js
│ │ ├── books.routes.js
│ │ ├── borrows.routes.js
│ │ ├── categories.routes.js
│ │ ├── dashboard.routes.js
│ │ └── users.routes.js
│ └── client/ # Routes người dùng
│ ├── index.routes.js
│ ├── books.routes.js
│ ├── borrows.routes.js
│ ├── home.routes.js
│ └── users.routes.js
│
├── middleware/
│ ├── auth.js # Xác thực JWT (header: x-auth-token)
│ └── role.js # Phân quyền theo vai trò
│
├── helpers/
│ ├── filterStatus.js # Lọc theo trạng thái
│ ├── pagination.js # Phân trang
│ └── search.js # Tìm kiếm
│
├── views/
│ ├── admin/ # Giao diện quản trị (Pug templates)
│ │ ├── layouts/
│ │ ├── pages/
│ │ ├── partials/
│ │ └── mixins/
│ └── client/ # Giao diện người dùng (Pug templates)
│ ├── layouts/
│ ├── pages/
│ ├── partials/
│ └── mixins/
│
└── public/
├── admin/ # Static files trang quản trị
├── client/ # Static files trang người dùng
└── css/ # Stylesheets
- Node.js (>= 18.x)
- MongoDB Atlas hoặc MongoDB local
- Git
1. Clone repository
git clone https://github.com/justHuyle/library-management.git
cd library-management2. Cài đặt dependencies
npm install3. Tạo file .env
Tạo file .env tại thư mục gốc của dự án với nội dung:
PORT=3000
MONGODB_URI=mongodb+srv://<username>:<password>@<cluster>.mongodb.net/<dbname>
JWT_SECRET=your_jwt_secret_key4. Chạy ứng dụng
# Chế độ development (auto-reload)
npm run dev
# Chế độ production
npm start5. Truy cập
Mở trình duyệt tại: http://localhost:3000
Hệ thống có 3 vai trò (roles) với các quyền hạn khác nhau:
| Vai trò | Mô tả | Quyền hạn |
|---|---|---|
| reader | Độc giả | Xem sách, mượn sách, xem lịch sử mượn, gia hạn, đổi mật khẩu |
| librarian | Thủ thư | Xem tất cả phiếu mượn, xác nhận trả sách |
| admin | Quản trị viên | Quản lý người dùng (CRUD), toàn quyền thủ thư |
- Đăng nhập qua
POST /api/users/login→ nhận JWT token + role - Token lưu trong
localStorage(keys:token,role,hoTen) - Các API request gửi kèm header
x-auth-token - Frontend tự động chuyển hướng theo vai trò
| Trường | Kiểu | Mô tả |
|---|---|---|
maSach |
String | Mã sách |
tenSach |
String | Tên sách |
tacGia |
String | Tác giả |
nhaXuatBan |
String | Nhà xuất bản |
namXuatBan |
Number | Năm xuất bản |
danhMuc |
String | Danh mục |
soLuongTong |
Number | Tổng số lượng |
soLuongConLai |
Number | Số lượng còn lại |
| Trường | Kiểu | Mô tả |
|---|---|---|
title |
String | Tên danh mục |
| Trường | Kiểu | Mô tả |
|---|---|---|
maNguoiDung |
String | Mã người dùng |
hoTen |
String | Họ tên |
email |
String | |
matKhau |
String | Mật khẩu (đã mã hóa) |
soDienThoai |
String | Số điện thoại |
diaChi |
String | Địa chỉ |
role |
String | Vai trò (reader / librarian / admin) |
soSachDuocMuon |
Number | Số sách được mượn |
| Trường | Kiểu | Mô tả |
|---|---|---|
maNguoiDung |
ObjectId (ref User) | Người mượn |
maSach |
ObjectId (ref Book) | Sách được mượn |
ngayMuon |
Date | Ngày mượn |
ngayPhaiTra |
Date | Ngày phải trả (mặc định: +7 ngày) |
ngayTraThucTe |
Date | Ngày trả thực tế |
trangThai |
String | Trạng thái (đang mượn / đã trả / quá hạn) |
| Method | Endpoint | Auth | Mô tả |
|---|---|---|---|
GET |
/api/books |
❌ | Danh sách sách (tìm kiếm, lọc, sắp xếp) |
POST |
/api/books |
❌ | Thêm sách mới |
GET |
/api/books/:id |
❌ | Chi tiết sách |
| Method | Endpoint | Auth | Role | Mô tả |
|---|---|---|---|---|
POST |
/api/users/register |
❌ | — | Đăng ký tài khoản |
POST |
/api/users/login |
❌ | — | Đăng nhập |
GET |
/api/users |
✅ | admin | Danh sách người dùng |
DELETE |
/api/users/:id |
✅ | admin | Xóa người dùng |
PUT |
/api/users/change-password |
✅ | — | Đổi mật khẩu |
| Method | Endpoint | Auth | Role | Mô tả |
|---|---|---|---|---|
POST |
/api/borrows |
✅ | — | Tạo phiếu mượn |
GET |
/api/borrows |
✅ | librarian/admin | Tất cả phiếu mượn |
GET |
/api/borrows/history |
✅ | — | Lịch sử mượn của bản thân |
PUT |
/api/borrows/:id/return |
✅ | librarian | Xác nhận trả sách |
PUT |
/api/borrows/:id/extend |
✅ | — | Gia hạn thêm 7 ngày |
- 🔍 Tìm kiếm & Lọc sách — Tìm kiếm theo tên, tác giả, lọc theo danh mục
- 📖 Quản lý sách — Thêm, sửa, xóa sách (Admin)
- 📂 Quản lý danh mục — CRUD danh mục sách (Admin)
- 👥 Quản lý người dùng — Thêm, xóa tài khoản (Admin)
- 📋 Mượn/Trả sách — Tạo phiếu mượn, xác nhận trả, gia hạn
- 📊 Dashboard — Tổng quan thống kê (Admin)
- 🔐 Phân quyền — 3 cấp: reader, librarian, admin
- 📄 Phân trang — Hỗ trợ phân trang danh sách
- 🔒 Bảo mật — JWT authentication, mã hóa mật khẩu bcrypt
- GitHub: justHuyle