Home  >  Q&A  >  body text

Error in mongodb: "Route.post() expected a callback function but received one"

This is my main file index.js

type here
const express = require("express");
const app = express();

require("dotenv").config();
const port = process.env.port || 4000;

app.use(express.json());

const createBlog = require("./routes/blogRoutes");

app.use("/santi/api/v1",createBlog);

app.listen(port, () => {
    console.log("App run in 3000 port");
})

const dbConnect = require("./config/database");
dbConnect();

app.get("/", (req,res) => {
    res.send(`<h1>this is homepage</h1>`);
})

This is my route

const express = require("express");
const router = express.Router();

const {createBlog} = require("../controlers/createBlog");

router.post("/createBlog",createBlog);

module.exports = router;

This is my controller file

const createPost = require("../models/post");

exports.post = async (req,res) => {
    try {
        const {title,description} = req.body;
        const response = await createPost.create({title,description});

        res.status(200).json({
            status:true,
            message:"Insert seccessfully",
            data:response
        })
    }
    catch(error) {
        console.error(err);
        res.status(500).json({
            status:false,
            message:error.message,
            data:"Server issue"
        })
    }
}

This is my model file

const mongoose = require("mongoose");

const blogPostSchema = new mongoose.Schema(
    {
        title:{
            type:String,
            required:true,
            maxlength:50
        },
        description:{
            type:String,
            required:true,
            maxlength:50
        }
    }
)

module.exports = mongoose.model("blogPost",blogPostSchema);

I installed nodemon and mongoose but still getting error in terminal after writing "npm run dev" command

[email protected] Developer Nodemon index.js

[nodemon] 2.0.22 [nodemon] Restart at any time, enter rs [nodemon] Monitoring path: . [nodemon] View extensions: js, mjs, json [nodemon] Start node index.js C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\route.js:211 throw newError(message); ^

Error: Route.post() expected a callback function but got one [object undefined] on the route. [As post] (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\route.js:211:15) in prototype. [As post] (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\index.js:521:19) in object. (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\routes\blogRoutes.js:6:8) in Module._compile (node:internal/modules/cjs/loader:1254:14) in Module._extensions..js (node:internal/modules/cjs/loader:1308:10) at Module.load(node:internal/modules/cjs/loader:1117:32) in Module._load (node:internal/modules/cjs/loader:958:12) in Module.require (node:internal/modules/cjs/loader:1141:19) when needed (node:internal/modules/cjs/helpers:110:18) in object. (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\index.js:9:20)

What is the solution?

P粉242535777P粉242535777182 days ago330

reply all(2)I'll reply

  • P粉457445858

    P粉4574458582024-04-03 00:56:11

    The problem is in your controller file, you are exporting a function called post and importing it as createBlog into your routes file. To correct your code you should update your controller and rename the function to createBlog :

    const createPost = require("../models/post");
    
    exports.createBlog = async (req,res) => {
        try {
            const {title,description} = req.body;
            const response = await createPost.create({title,description});
    
            res.status(200).json({
                status:true,
                message:"Insert seccessfully",
                data:response
            })
        }
        catch(error) {
            console.error(err);
            res.status(500).json({
                status:false,
                message:error.message,
                data:"Server issue"
            })
        }
    }
    

    reply
    0
  • P粉099145710

    P粉0991457102024-04-03 00:52:52

    I found a small bug in your router code.
    You export the function in the controller as post and import it in the router as createBlog. And your controller doesn't export anything named createBlog, hence the problem.

    Just change the router code to:

    const express = require("express");
    const router = express.Router();
    
    const {post} = require("../controlers/createBlog");
    
    router.post("/createBlog",post);
    
    module.exports = router;

    reply
    0
  • Cancelreply