Heim  >  Fragen und Antworten  >  Hauptteil

Fehler in Mongodb: „Route.post() hat eine Rückruffunktion erwartet, aber eine erhalten“

Dies ist meine Hauptdatei 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>`);
})

Das ist meine Route

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

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

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

module.exports = router;

Das ist meine Controller-Datei

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"
        })
    }
}

Das ist meine Modelldatei

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);

Ich habe Nodemon und Mongoose installiert, erhalte aber immer noch eine Fehlermeldung im Terminal, nachdem ich den Befehl „npm run dev“ geschrieben habe

[email protected] Entwickler Nodemon index.js

[nodemon] 2.0.22 【nodemon】 Jederzeit neu starten, rs eingeben [nodemon] Überwachungspfad: . [nodemon] Erweiterungen anzeigen: js, mjs, json [nodemon] starten node index.js C:UsersSWETTAOneDriveDesktopblog_backendnode_modulesexpresslibrouterroute.js:211 throw newError(message); ^

Fehler: Route.post() hat eine Rückruffunktion erwartet, aber eine erhalten [Objekt undefiniert] auf dem Weg. [Als Beitrag] (C:UsersSWETTAOneDriveDesktopblog_backendnode_modulesexpresslibrouterroute.js:211:15) im Prototyp. [Als Beitrag] (C:UsersSWETTAOneDriveDesktopblog_backendnode_modulesexpresslibrouterindex.js:521:19) im Objekt. (C:UsersSWETTAOneDriveDesktopblog_backendroutesblogRoutes.js:6:8) in Module._compile (node:internal/modules/cjs/loader:1254:14) in Module._extensions..js (node:internal/modules/cjs/loader:1308:10) bei 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) bei Bedarf (node:internal/modules/cjs/helpers:110:18) im Objekt. (C:UsersSWETTAOneDriveDesktopblog_backendindex.js:9:20)

Was ist die Lösung?

P粉242535777P粉242535777182 Tage vor324

Antworte allen(2)Ich werde antworten

  • P粉457445858

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

    问题出在您的控制器文件中,您正在导出名为 post 的函数,并将其作为 createBlog 导入到您的路由文件中。要更正您的代码,您应该更新您的控制器并将该函数重命名为 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"
            })
        }
    }
    

    Antwort
    0
  • P粉099145710

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

    我在您的路由器代码中发现一个小错误。
    您在控制器中将函数导出为 post ,并将其导入路由器中作为 createBlog 。并且您的控制器不会导出任何名为 createBlog 的内容,因此问题是。

    只需将路由器代码更改为:

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

    Antwort
    0
  • StornierenAntwort