I'm working on a task management system using Node.js, Express, and Prisma. I have a TaskController that handles CRUD operations. Creating and retrieving employees work fine, but when I try to create a task , I get this error:Cannot POST /api/v2/tasks/ what is the issue? task.controller.js
const TaskRepository = require("../repositories/task.repository");
const { ApiResponse } = require("../utils/api-response");
const { ApiError } = require("../utils/api-error");
class TaskController {
constructor() {
this.repository = new TaskRepository();
}
async getAllTasks(req, res, next) {
try {
const tasks = await this.repository.findAll();
res.json(new ApiResponse(200, "Tasks retrieved", tasks));
} catch (error) {
next(error);
}
}
async getTaskById(req, res, next) {
try {
const id = parseInt(req.params.id);
const task = await this.repository.findById(id);
res.json(new ApiResponse(200, "Task retrieved", task));
} catch (error) {
next(error);
}
}
async getTasksByEmployee(req, res, next) {
try {
const employeeId = parseInt(req.params.employeeId);
const tasks = await this.repository.findByEmployeeId(employeeId);
res.json(new ApiResponse(200, "Tasks for employee retrieved", tasks));
} catch (error) {
next(error);
}
}
async createTask(req, res, next) {
try {
const task = await this.repository.create(req.body);
res.status(201).json(new ApiResponse(201, "Task created", task));
} catch (error) {
next(error);
}
}
async updateTask(req, res, next) {
try {
const id = parseInt(req.params.id);
const updatedTask = await this.repository.update(id, req.body);
res.json(new ApiResponse(200, "Task updated", updatedTask));
} catch (error) {
next(error);
}
}
async deleteTask(req, res, next) {
try {
const id = parseInt(req.params.id);
await this.repository.delete(id);
res.json(new ApiResponse(200, "Task deleted"));
} catch (error) {
next(error);
}
}
}
module.exports = TaskController;
task.repository.js
const prisma = require("../prisma/prisma.service");
const { ApiError } = require("../utils/api-error");
class TaskRepository {
async findAll() {
try {
return await prisma.task.findMany({ include: { employee: true } });
} catch (error) {
throw new ApiError(500, "Error fetching tasks", [error]);
}
}
async findById(id) {
try {
const task = await prisma.task.findUnique({
where: { id },
include: { employee: true }
});
if (!task) {
throw new ApiError(404, "Task not found");
}
return task;
} catch (error) {
if (error instanceof ApiError) throw error;
throw new ApiError(500, "Error fetching task", [error]);
}
}
async findByEmployeeId(employeeId) {
try {
return await prisma.task.findMany({
where: { employeeId: parseInt(employeeId) },
include: { employee: true }
});
} catch (error) {
throw new ApiError(500, "Error fetching employee's tasks", [error]);
}
}
async create(data) {
try {
console.log(" Data passed to create task:", data); // Debugging
return await prisma.task.create({ data });
} catch (error) {
throw new ApiError(400, "Error creating task", [error]);
}
}
async update(id, data) {
try {
console.log(" Data passed to update task:", data); // Debugging
return await prisma.task.update({
where: { id },
data
});
} catch (error) {
throw new ApiError(400, "Error updating task", [error]);
}
}
async delete(id) {
try {
return await prisma.task.delete({ where: { id } });
} catch (error) {
throw new ApiError(400, "Error deleting task", [error]);
}
}
}
module.exports = new TaskRepository();
task.routes.js
// task.routes.js
const express = require("express");
const TaskController = require("../controllers/task.controller");
const router = express.Router();
const taskController = new TaskController();
// Use arrow functions for route handlers (like employee.routes.js)
router.get("/", (req, res, next) => taskController.getAllTasks(req, res, next));
router.get("/:id", (req, res, next) => taskController.getTaskById(req, res, next));
router.post("/", (req, res, next) => taskController.createTask(req, res, next)); // Fixed
router.put("/:id", (req, res, next) => taskController.updateTask(req, res, next));
router.delete("/:id", (req, res, next) => taskController.deleteTask(req, res, next));
console.log(" Task routes registered:", router.stack.map(r => r.route?.path).filter(Boolean));
module.exports = router;
server.js
const express = require("express");
const cors = require("cors");
const vatRoutes = require("./routes/vat.routes"); // VAT routes
const employeeRoutes = require("./routes/employees.routes"); // Employee routes
const taskRoutes = require("./routes/task.routes"); // Task routes
const app = express();
// Middleware
app.use(cors()); // Prevent CORS issues
app.use(express.json()); // Parse JSON requests
// Debugging middleware (logs all requests)
app.use((req, res, next) => {
console.log(` Received request: ${req.method} ${req.url}`);
next();
});
// API Routes
app.use("/api/v1/vat", vatRoutes);
app.use("/api/v1/employees", employeeRoutes);
app.use("/api/v1/tasks", taskRoutes);
// Global Error Handler
app.use((err, req, res, next) => {
console.error(" Server Error:", err);
res.status(err.statusCode || 500).json({
message: err.message || "Internal Server Error",
errors: err.errors || [],
});
});
console.log(" All registered routes:",
app._router.stack
.filter(r => r.route)
.map(r => ({
path: r.route.path,
methods: Object.keys(r.route.methods)
}))
);
// Start Server
const PORT = process.env.PORT || 3002;
app.listen(PORT, () => {
console.log(` Server running on http://localhost:${PORT}`);
});
i have done same thingfor employees and creating , getting works well
I'm working on a task management system using Node.js, Express, and Prisma. I have a TaskController that handles CRUD operations. Creating and retrieving employees work fine, but when I try to create a task , I get this error:Cannot POST /api/v2/tasks/ what is the issue? task.controller.js
const TaskRepository = require("../repositories/task.repository");
const { ApiResponse } = require("../utils/api-response");
const { ApiError } = require("../utils/api-error");
class TaskController {
constructor() {
this.repository = new TaskRepository();
}
async getAllTasks(req, res, next) {
try {
const tasks = await this.repository.findAll();
res.json(new ApiResponse(200, "Tasks retrieved", tasks));
} catch (error) {
next(error);
}
}
async getTaskById(req, res, next) {
try {
const id = parseInt(req.params.id);
const task = await this.repository.findById(id);
res.json(new ApiResponse(200, "Task retrieved", task));
} catch (error) {
next(error);
}
}
async getTasksByEmployee(req, res, next) {
try {
const employeeId = parseInt(req.params.employeeId);
const tasks = await this.repository.findByEmployeeId(employeeId);
res.json(new ApiResponse(200, "Tasks for employee retrieved", tasks));
} catch (error) {
next(error);
}
}
async createTask(req, res, next) {
try {
const task = await this.repository.create(req.body);
res.status(201).json(new ApiResponse(201, "Task created", task));
} catch (error) {
next(error);
}
}
async updateTask(req, res, next) {
try {
const id = parseInt(req.params.id);
const updatedTask = await this.repository.update(id, req.body);
res.json(new ApiResponse(200, "Task updated", updatedTask));
} catch (error) {
next(error);
}
}
async deleteTask(req, res, next) {
try {
const id = parseInt(req.params.id);
await this.repository.delete(id);
res.json(new ApiResponse(200, "Task deleted"));
} catch (error) {
next(error);
}
}
}
module.exports = TaskController;
task.repository.js
const prisma = require("../prisma/prisma.service");
const { ApiError } = require("../utils/api-error");
class TaskRepository {
async findAll() {
try {
return await prisma.task.findMany({ include: { employee: true } });
} catch (error) {
throw new ApiError(500, "Error fetching tasks", [error]);
}
}
async findById(id) {
try {
const task = await prisma.task.findUnique({
where: { id },
include: { employee: true }
});
if (!task) {
throw new ApiError(404, "Task not found");
}
return task;
} catch (error) {
if (error instanceof ApiError) throw error;
throw new ApiError(500, "Error fetching task", [error]);
}
}
async findByEmployeeId(employeeId) {
try {
return await prisma.task.findMany({
where: { employeeId: parseInt(employeeId) },
include: { employee: true }
});
} catch (error) {
throw new ApiError(500, "Error fetching employee's tasks", [error]);
}
}
async create(data) {
try {
console.log(" Data passed to create task:", data); // Debugging
return await prisma.task.create({ data });
} catch (error) {
throw new ApiError(400, "Error creating task", [error]);
}
}
async update(id, data) {
try {
console.log(" Data passed to update task:", data); // Debugging
return await prisma.task.update({
where: { id },
data
});
} catch (error) {
throw new ApiError(400, "Error updating task", [error]);
}
}
async delete(id) {
try {
return await prisma.task.delete({ where: { id } });
} catch (error) {
throw new ApiError(400, "Error deleting task", [error]);
}
}
}
module.exports = new TaskRepository();
task.routes.js
// task.routes.js
const express = require("express");
const TaskController = require("../controllers/task.controller");
const router = express.Router();
const taskController = new TaskController();
// Use arrow functions for route handlers (like employee.routes.js)
router.get("/", (req, res, next) => taskController.getAllTasks(req, res, next));
router.get("/:id", (req, res, next) => taskController.getTaskById(req, res, next));
router.post("/", (req, res, next) => taskController.createTask(req, res, next)); // Fixed
router.put("/:id", (req, res, next) => taskController.updateTask(req, res, next));
router.delete("/:id", (req, res, next) => taskController.deleteTask(req, res, next));
console.log(" Task routes registered:", router.stack.map(r => r.route?.path).filter(Boolean));
module.exports = router;
server.js
const express = require("express");
const cors = require("cors");
const vatRoutes = require("./routes/vat.routes"); // VAT routes
const employeeRoutes = require("./routes/employees.routes"); // Employee routes
const taskRoutes = require("./routes/task.routes"); // Task routes
const app = express();
// Middleware
app.use(cors()); // Prevent CORS issues
app.use(express.json()); // Parse JSON requests
// Debugging middleware (logs all requests)
app.use((req, res, next) => {
console.log(` Received request: ${req.method} ${req.url}`);
next();
});
// API Routes
app.use("/api/v1/vat", vatRoutes);
app.use("/api/v1/employees", employeeRoutes);
app.use("/api/v1/tasks", taskRoutes);
// Global Error Handler
app.use((err, req, res, next) => {
console.error(" Server Error:", err);
res.status(err.statusCode || 500).json({
message: err.message || "Internal Server Error",
errors: err.errors || [],
});
});
console.log(" All registered routes:",
app._router.stack
.filter(r => r.route)
.map(r => ({
path: r.route.path,
methods: Object.keys(r.route.methods)
}))
);
// Start Server
const PORT = process.env.PORT || 3002;
app.listen(PORT, () => {
console.log(` Server running on http://localhost:${PORT}`);
});
i have done same thingfor employees and creating , getting works well
Share Improve this question asked yesterday Ahmed MohamedAhmed Mohamed 1 New contributor Ahmed Mohamed is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct. 5 |1 Answer
Reset to default 0app.use("/api/v1/tasks", taskRoutes);
should be
app.use("/api/v2/tasks", taskRoutes);
POST /api/v2/tasks/
(as opposed to the route defined in your Express serverapi/v2/tasks
without a trailing slash) – TBA Commented yesterdayapp.use("/api/v1/tasks", taskRoutes);
– traynor Commented yesterday