Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nchimunyascripts/node-todo-list
This project is a To-Do List application built using Node.js, Express, MongoDB, Redis, and JWT authentication. It allows users to register, log in, create, update, delete, and retrieve to-do items.
https://github.com/nchimunyascripts/node-todo-list
api api-rest bycrpt express javascript jwt jwt-authentication list mongodb mongoose node todo
Last synced: 2 months ago
JSON representation
This project is a To-Do List application built using Node.js, Express, MongoDB, Redis, and JWT authentication. It allows users to register, log in, create, update, delete, and retrieve to-do items.
- Host: GitHub
- URL: https://github.com/nchimunyascripts/node-todo-list
- Owner: nchimunyascripts
- Created: 2024-10-09T17:24:20.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-10-17T16:18:58.000Z (4 months ago)
- Last Synced: 2024-10-19T12:12:46.613Z (4 months ago)
- Topics: api, api-rest, bycrpt, express, javascript, jwt, jwt-authentication, list, mongodb, mongoose, node, todo
- Language: JavaScript
- Homepage:
- Size: 3.4 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# To-Do List Application with Node.js, Express, MongoDB, and Redis
This project is a To-Do List application built using Node.js, Express, MongoDB, Redis, and JWT authentication. It allows users to register, log in, create, update, delete, and retrieve to-do items. The application also includes pagination for efficient data handling and Redis for caching and session management.
## Table of Contents
- [Project Overview](#project-overview)
- [Features](#features)
- [Technologies Used](#technologies-used)
- [Project Structure](#project-structure)
- [Getting Started](#getting-started)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Running the Application](#running-the-application)
- [API Endpoints](#api-endpoints)
- [Successes and Challenges](#successes-and-challenges)
- [Next Steps](#next-steps)
- [License](#license)## Project Overview
This is a full-stack To-Do List application where users can manage their tasks by performing CRUD operations. The app supports:
- User authentication via JWT.
- Secure password hashing with `bcryptjs`.
- Session management and caching with Redis.
- Pagination for managing a large number of tasks.
- RESTful API structure.## Features
- **User Registration and Authentication**: Users can register, log in, and manage their own tasks.
- **Task Management**: Users can create, update, delete, and retrieve to-do items.
- **Pagination**: Large task lists are paginated for optimized performance.
- **Session Management with Redis**: User sessions are stored and managed using Redis for improved performance and scalability.
- **JWT-based Authentication**: Secure user authentication via JWT tokens.## Technologies Used
- **Node.js**: Server-side runtime environment.
- **Express.js**: Framework for building RESTful APIs.
- **MongoDB**: NoSQL database for storing users and tasks.
- **Mongoose**: ODM for MongoDB.
- **Redis**: In-memory data structure store used for session management and caching.
- **JWT (jsonwebtoken)**: Authentication using JSON Web Tokens.
- **bcryptjs**: For hashing user passwords.
- **dotenv**: For managing environment variables.
- **mongoose-paginate-v2**: Pagination support for MongoDB queries.
- **express-session**: Session management middleware.## Project Structure
```
├── config
│ └── db.js # MongoDB and Redis configuration
├── controllers
│ ├── authController.js
│ └── todoController.js
├── middlewares
│ └── auth.js # Middleware for authentication
├── models
│ ├── User.js
│ └── Todo.js
├── routes
│ ├── authRoutes.js
│ └── todoRoutes.js
├── .env # Environment variables
├── server.js # Entry point of the application
└── package.json # Project dependencies
```## Getting Started
### Prerequisites
Ensure you have the following software installed:
- Node.js (version 14+)
- MongoDB (local or Atlas)
- Redis (local or remote instance)### Installation
1. Clone the repository:
```bash
git clone https://github.com/nchimunyascripts/node-todo-list
cd node-todo-list
```2. Install dependencies:
```bash
npm install
```3. Set up environment variables by creating a `.env` file:
```bash
PORT=5000
MONGO_URI=mongodb://localhost:27017/todolist
REDIS_URL=redis://localhost:6379
JWT_SECRET=supersecretkey
```### Running the Application
Start the application:
```bash
npm run start
```Or to run the application with nodemon
```bash
npm run dev
```The server will run on `http://localhost:5000`.
## API Endpoints
### User Authentication
- `POST /api/auth/register`: Register a new user.
- `POST /api/auth/login`: Log in a user and return a JWT token.### To-Do Operations
- `GET /api/todos`: Get all to-dos for a logged-in user (supports pagination).
- `POST /api/todos`: Create a new to-do.
- `PUT /api/todos/:id`: Update an existing to-do by its ID.
- `DELETE /api/todos/:id`: Delete a to-do by its ID.## Successes and Challenges
### Successes
- **Redis integration**: Efficient session management using Redis for storing user sessions.
- **Pagination**: Successful implementation of pagination to handle large datasets in MongoDB.
- **Authentication**: Secure authentication using JWT and password hashing with bcryptjs.### Challenges
- **Redis v4+ Compatibility**: Faced challenges with configuring `connect-redis` with Redis v4+.
- **Error Handling**: Handling different error cases, especially during authentication and CRUD operations, was complex and required extra attention.## Next Steps
- **Add Role-based Access Control**: Implement roles like admin and user.
- **Deploy to Production**: Deploy the app to cloud services such as AWS or Heroku.
- **Real-time Features**: Introduce real-time task updates using WebSockets or Socket.io.
- **Testing**: Add unit and integration tests to cover all API endpoints.## License
This project is licensed under the MIT License.