Node.js Project – To-Do App

📘 Node.js 👁 41 views 📅 Nov 05, 2025
⏱ Estimated reading time: 3 min

A To‑Do App is a beginner‑to‑intermediate Node.js project that demonstrates REST API design, CRUD operations, middleware usage, and basic persistence. This version is clean, simple, and production‑ready in structure.


1. Project Overview

The To‑Do App allows users to:

  • Create tasks

  • View all tasks

  • Update task status

  • Delete tasks

Each task contains:

  • Title

  • Completion status

  • Creation date


2. Tech Stack

  • Node.js – Runtime

  • Express.js – Web framework

  • MongoDB – Database (via Mongoose)

  • dotenv – Environment variables

  • Postman – API testing


3. Project Structure

todo-app/
├── models/
│ └── Todo.js
├── routes/
│ └── todoRoutes.js
├── controllers/
│ └── todoController.js
├── config/
│ └── db.js
├── app.js
├── .env
├── package.json

4. Installation & Setup

npm init -y
npm install express mongoose dotenv

Create .env file:

PORT=3000
MONGO_URI=mongodb://localhost:27017/todoDB

5. Database Connection (MongoDB)

config/db.js

const mongoose = require('mongoose');

const connectDB = async () => {
await mongoose.connect(process.env.MONGO_URI);
console.log('MongoDB Connected');
};

module.exports = connectDB;

6. Todo Model

models/Todo.js

const mongoose = require('mongoose');

const todoSchema = new mongoose.Schema({
title: { type: String, required: true },
completed: { type: Boolean, default: false },
}, { timestamps: true });

module.exports = mongoose.model('Todo', todoSchema);

7. Controller Logic

controllers/todoController.js

const Todo = require('../models/Todo');

exports.createTodo = async (req, res) => {
const todo = await Todo.create(req.body);
res.status(201).json(todo);
};

exports.getTodos = async (req, res) => {
const todos = await Todo.find();
res.json(todos);
};

exports.updateTodo = async (req, res) => {
const todo = await Todo.findByIdAndUpdate(req.params.id, req.body, { new: true });
res.json(todo);
};

exports.deleteTodo = async (req, res) => {
await Todo.findByIdAndDelete(req.params.id);
res.json({ message: 'Todo deleted' });
};

8. Routes

routes/todoRoutes.js

const express = require('express');
const router = express.Router();
const controller = require('../controllers/todoController');

router.post('/', controller.createTodo);
router.get('/', controller.getTodos);
router.put('/:id', controller.updateTodo);
router.delete('/:id', controller.deleteTodo);

module.exports = router;

9. Main Application File

app.js

const express = require('express');
require('dotenv').config();
const connectDB = require('./config/db');

const app = express();
connectDB();

app.use(express.json());
app.use('/api/todos', require('./routes/todoRoutes'));

app.listen(process.env.PORT, () => {
console.log(`Server running on port ${process.env.PORT}`);
});

10. API Endpoints

MethodEndpointDescription
POST/api/todosCreate a task
GET/api/todosGet all tasks
PUT/api/todos/:idUpdate task
DELETE/api/todos/:idDelete task

11. Sample JSON Request

{
"title": "Learn Node.js"
}

12. Best Practices Used

  • MVC architecture

  • Environment variables

  • RESTful routing

  • Async/Await

  • Modular code


13. Possible Enhancements

  • User authentication

  • Task priorities

  • Due dates

  • Frontend with React

  • Deployment (Render / Railway)


14. Learning Outcomes

✔ REST API development ✔ Database integration ✔ Project structuring ✔ CRUD operations ✔ Real‑world backend flow


15. Conclusion

This Node.js To‑Do App is a solid foundation project that demonstrates core backend concepts and can be extended into a full‑stack application.


🔒 Some advanced sections are available for Registered Members
Register Now

Share this Post


← Back to Tutorials

Popular Competitive Exam Quizzes