Build A Full Stack App with Axios 2025
đ Build a Full Stack App with Axios (2025)
Create a full-stack task manager app using React, Axios, Node.js, Express, and MongoDB.
đĻ Tech Stack
Part
Stack Used
Frontend
React + Tailwind CSS + Axios
Backend
Node.js + Express.js
Database
MongoDB (Mongoose)
Tools
Postman, Nodemon, .env, CORS
đ§ Backend Setup (/server
)
đ Folder Structure
/server
âŖ /models
â â Task.js
âŖ /routes
â â tasks.js
âŖ .env
âŖ server.js
â package.json
a. server.js
const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
require('dotenv').config();
const app = express();
app.use(cors());
app.use(express.json());
mongoose.connect(process.env.MONGO_URI)
.then(() => console.log('MongoDB Connected'));
app.use('/api/tasks', require('./routes/tasks'));
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on ${PORT}`));
b. models/Task.js
const mongoose = require('mongoose');
const TaskSchema = new mongoose.Schema({
title: String,
completed: Boolean
});
module.exports = mongoose.model('Task', TaskSchema);
c. routes/tasks.js
const express = require('express');
const router = express.Router();
const Task = require('../models/Task');
router.get('/', async (req, res) => {
const tasks = await Task.find();
res.json(tasks);
});
router.post('/', async (req, res) => {
const task = new Task(req.body);
await task.save();
res.json(task);
});
router.put('/:id', async (req, res) => {
const task = await Task.findByIdAndUpdate(req.params.id, req.body, { new: true });
res.json(task);
});
router.delete('/:id', async (req, res) => {
await Task.findByIdAndDelete(req.params.id);
res.json({ success: true });
});
module.exports = router;
d. .env
MONGO_URI=mongodb://localhost:27017/taskdb
đ Frontend Setup (/client
)
đ Folder Structure
/client
âŖ /src
â âŖ /components
â â â TaskList.jsx
â â App.jsx
âŖ .env
â package.json
a. .env
for Axios
VITE_API_URL=http://localhost:5000/api
b. Install Axios
npm install axios
c. App.jsx
import React from 'react';
import TaskList from './components/TaskList';
function App() {
return (
Task Manager 2025
);
}
export default App;
d. TaskList.jsx
import React, { useEffect, useState } from 'react';
import axios from 'axios';
const API = import.meta.env.VITE_API_URL;
const TaskList = () => {
const [tasks, setTasks] = useState([]);
const [newTitle, setNewTitle] = useState('');
const fetchTasks = async () => {
const res = await axios.get(`${API}/tasks`);
setTasks(res.data);
};
const createTask = async () => {
await axios.post(`${API}/tasks`, { title: newTitle, completed: false });
setNewTitle('');
fetchTasks();
};
const toggleComplete = async (id, completed) => {
await axios.put(`${API}/tasks/${id}`, { completed: !completed });
fetchTasks();
};
const deleteTask = async (id) => {
await axios.delete(`${API}/tasks/${id}`);
fetchTasks();
};
useEffect(() => {
fetchTasks();
}, []);
return (
setNewTitle(e.target.value)}
placeholder="New Task"
/>
{tasks.map((task) => (
toggleComplete(task._id, task.completed)}
>
{task.title}
))}
);
};
export default TaskList;
â
Features Covered
- Fetch tasks (GET)
- Create task (POST)
- Toggle complete (PUT)
- Delete task (DELETE)
đ§Ē Testing
- Use Postman to test API endpoints
- Use React DevTools to test state changes
đĻ Deployment
- Use Render or Railway for backend deployment
- Use Vercel or Netlify for frontend
- Use MongoDB Atlas for remote DB