#Route.post() requires callback function

4 messages · Page 1 of 1 (latest)

mint hull
#

ive been dealing with this error

        throw new Error(msg);
        ^

Error: Route.post() requires a callback function but got a [object Undefined]
    at Route.<computed> [as post] (C:\Users\I\python\x\workspace\choreapp\node_modules\express\lib\router\route.js:216:15)
    at proto.<computed> [as post] (C:\Users\I\python\x\workspace\choreapp\node_modules\express\lib\router\index.js:521:19)
    at Object.<anonymous> (C:\Users\I\python\x\workspace\choreapp\routes\taskRoutes.js:8:8)
    at Module._compile (node:internal/modules/cjs/loader:1368:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1426:10)
    at Module.load (node:internal/modules/cjs/loader:1205:32)
    at Module._load (node:internal/modules/cjs/loader:1021:12)
    at Module.require (node:internal/modules/cjs/loader:1230:19)
    at require (node:internal/modules/helpers:179:18)
    at Object.<anonymous> (C:\Users\I\python\x\workspace\choreapp\server.js:4:20)

Node.js v21.7.3```




im pretty sure its q middleware issue but ive changed it and tried to troubleshoot it nearly 25 times now and i cant figure it out, any help would be appreciated, been at this for hours
#

verifyToken.js

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

console.log('Verify token middleware executed');

const verifyToken = async (req, res, next) => {
  try {
    const token = req.headers.authorization?.split(' ')[1];
    if (!token) {
      return res.status(403).send({ message: 'A token is required for authentication' });
    }
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    const user = await User.findById(decoded.id);
    if (!user) {
      return res.status(401).send({ message: 'Invalid Token' });
    }
    req.user = user;
    next();
  } catch (error) {
    console.error('Error verifying token:', error);
    return res.status(401).send({ message: 'Invalid Token', error: error.message });
  }
};

module.exports = verifyToken;```
#

my taskRoutes.js

const Task = require('../models/Task');
const verifyToken = require('../middleware/verifyToken');

const router = express.Router();

console.log('verifyToken middleware:', verifyToken);

// Create a task
router.post('/create', verifyToken, async (req, res) => {
  try {
    const task = new Task(req.body);
    await task.save();
    console.log('Task created successfully:', task);
    res.status(201).send({ message: 'Task created successfully', task });
  } catch (error) {
    console.error('Error creating task:', error);
    res.status(400).send({ error: error.message });
  }
});

// Update task status to verified
router.patch('/verify/:taskId', verifyToken, async (req, res) => {
  try {
    const task = await Task.findByIdAndUpdate(req.params.taskId, { status: 'verified' }, { new: true });
    if (!task) {
      console.log('Task not found with id:', req.params.taskId);
      return res.status(404).send({ message: 'Task not found' });
    }
    console.log('Task verified successfully:', task);
    res.send({ message: 'Task verified successfully', task });
  } catch (error) {
    console.error('Error verifying task:', error);
    res.status(400).send({ error: error.message });
  }
});

// Dynamically update tasks (AJAX)
router.get('/list', verifyToken, async (req, res) => {
  try {
    const tasks = await Task.find({ assignedChild: req.user._id }).exec();
    console.log('Tasks retrieved successfully:', tasks);
    res.send(tasks);
  } catch (error) {
    console.error('Error retrieving tasks:', error);
    res.status(500).send({ error: error.message });
  }
});

module.exports = router;```
#

prob couldve been smaller but i attached it all anyway