'node.js req.body returning undefined

EDIT: @LawrenceCherone solved this, its (req, res, next) not (err, res, req)

I am creating a MERN app (Mongo, express, react, node). I have some routes that work fine and return data from mongodb. However I created a new controller to access a separate collection and whenever i try to create a new document in it my req.body returns undefined.

I have setup my server.js like this:

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");

const connectDB = require("./db");

const app = express();
const apiPort = 3000;

app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors());
app.use(bodyParser.json());

connectDB();

app.use("/api", require("./routes/router"));

var server = app.listen(apiPort, () => console.log(`Server running on port ${apiPort}`));

module.exports = server;

My router looks like this:

const express = require("express");

const QuizController = require("../controllers/quiz-controller");
const UserController = require("../controllers/user-controller");

const router = express.Router();

// quiz routes
router.post("/quizzes", QuizController.createQuestion);
router.get("/quizzes", QuizController.getAllQuestions);
router.get("/quizzes/:quiz_name", QuizController.getQuestionsByQuiz);
router.get("/quizzes/questions/:question_id", QuizController.getQuestionById);
router.put("/quizzes/:question_id/edit", QuizController.updateQuestionById);
router.delete("/quizzes/:question_id", QuizController.deleteQuestionById);

// user routes
router.post("/users", UserController.createUser);

module.exports = router;

All of the /quizzes routes work perfectly fine and i have had no trouble accessing the body. The UserController.createUser method is almost identical to Quizcontroller.createQuestion too so I am very confused.

Here is the user-controller with the createUser function:

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

createUser = async (err, res, req) => {
    const body = req.body;
    console.log(req.body);
    console.log(req.params);
    console.log(body);
    if (!body) {
        return res.status(400).json({
            succes: false,
            error: "You must provide a body",
        });
    }
    try {
        const newUser = new User(body);

        console.log(newUser);
        if (!newUser) {
            return res.status(400).json({ success: false, error: err });
        }

        const user = await newUser.save();
        return res
            .status(200)
            .json({ success: true, newUser: user, msg: "New user created" });
    } catch (err) {
        console.error(err.message);
        res.status(500).send("Server error");
    }
};

module.exports = { createUser };

Here is an image of the postman request I am using to try test this: [1]: https://i.stack.imgur.com/UHAK5.png

And the user model:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const UserSchema = new Schema({
    name: {
        type: String,
        required: true,
    },
    emailAddress: {
        type: String,
        required: true,
    },
    permission: {
        type: String,
        required: true,
    },
    auth0Id: {
        type: String,
        required: true,
    },
});

module.exports = mongoose.model("users", UserSchema);


Solution 1:[1]

The functional parameter order matters. its

createUser = async (req, res, next) =>  // correct format

Not

createUser = async (err, res, req) // wrong format

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Sayeed A P