A RESTful backend for a Library Management System with role-based authentication for Librarians and Members.
- JWT-based authentication
- Role-based access control (Librarian / Member)
- Book management (CRUD) — Librarian only
- Member management — Librarian only
- Borrow / Return books — Member only
- Input validation using express-validator
- Centralized error handling
- Node.js + Express.js
- MongoDB + Mongoose
- JWT (jsonwebtoken)
- bcrypt
- express-validator
library-management-system/
├── config/
│ └── db.js
├── controllers/
│ ├── authController.js
│ ├── bookController.js
│ └── memberController.js
├── middleware/
│ ├── authMiddleware.js
│ ├── roleMiddleware.js
│ └── errorMiddleware.js
├── models/
│ ├── User.js
│ ├── Book.js
│ └── Borrow.js
├── routes/
│ ├── authRoutes.js
│ ├── bookRoutes.js
│ └── memberRoutes.js
├── validators/
│ └── validationRules.js
├── .env
├── server.js
└── package.json
- Clone the repository
git clone https://github.com/Pavanakv/Library-Management-System.git
cd library-management-system- Install dependencies
npm install- Create a
.envfile in the root with the following variables:
PORT=5000
DATABASE_URL=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_key
- Run the server
npm run devServer will start on http://localhost:5000
This project uses MongoDB. You can use either:
- A local MongoDB instance, or
- MongoDB Atlas (cloud)
Three collections are created automatically by Mongoose on first use:
users— stores both members and librariansbooks— stores book inventoryborrows— stores borrow/return records
Note: Librarian accounts cannot be created via the API. They must be inserted directly into the database with a bcrypt-hashed password and role: "librarian".
| Method | Endpoint | Access | Description |
|---|---|---|---|
| POST | /api/auth/register | Public | Register as a member |
| POST | /api/auth/login | Public | Login (member or librarian) |
| Method | Endpoint | Access | Description |
|---|---|---|---|
| POST | /api/books | Librarian | Add a new book |
| GET | /api/books | Authenticated | Get all books |
| GET | /api/books/:id | Authenticated | Get book details |
| PUT | /api/books/:id | Librarian | Update book |
| DELETE | /api/books/:id | Librarian | Delete book |
| POST | /api/books/:id/borrow | Member | Borrow a book |
| POST | /api/books/:id/return | Member | Return a book |
| Method | Endpoint | Access | Description |
|---|---|---|---|
| GET | /api/members | Librarian | Get all members |
| DELETE | /api/members/:id | Librarian | Delete a member |
| GET | /api/members/me/books | Member | Get logged-in member's borrowed books |
- Member registers via
/api/auth/register(role is always set tomember) - User logs in via
/api/auth/login, receives a JWT token - Token must be sent in the
Authorizationheader asBearer <token>for all protected routes authMiddleware.jsverifies the token and attaches the user toreq.userroleMiddleware.jschecksreq.user.roleagainst the allowed roles for that route
Live API URL: https://library-management-system-h8xl.onrender.com
Pavana K V