Maison  >  Questions et réponses  >  le corps du texte

Erreur dans mongodb : "Route.post() attendait une fonction de rappel mais en a reçu une"

C'est mon fichier principal 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>`);
})

C'est mon itinéraire

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

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

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

module.exports = router;

Voici mon fichier de contrôleur

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

Voici mon fichier modèle

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

J'ai installé nodemon et mongoose mais j'obtiens toujours une erreur dans le terminal après avoir écrit la commande "npm run dev"

[email protégé] Développeur Nodémon index.js

[nodémon] 2.0.22 【nodemon】Redémarrez à tout moment, entrez rs [nodemon] Chemin de surveillance : . [nodemon] Afficher les extensions : js, mjs, json [nodémon] démarre node index.js C:UtilisateursSWETTAOneDriveDesktopblog_backendnode_modulesexpresslibrouterroute.js:211 lancer newError(message); ^

Erreur : Route.post() attendait une fonction de rappel mais en a obtenu une [objet non défini] sur le parcours. [Comme message] (C:UsersSWETTAOneDriveDesktopblog_backendnode_modulesexpresslibrouterroute.js:211:15) en prototype. [Comme message] (C:UsersSWETTAOneDriveDesktopblog_backendnode_modulesexpresslibrouterindex.js:521:19) en objet. (C:UtilisateursSWETTAOneDriveDesktopblog_backendroutesblogRoutes.js:6:8) dans Module._compile (node:internal/modules/cjs/loader:1254:14) dans Module._extensions..js (node:internal/modules/cjs/loader:1308:10) sur Module.load (node:internal/modules/cjs/loader:1117:32) dans Module._load (node:internal/modules/cjs/loader:958:12) dans Module.require (node:internal/modules/cjs/loader:1141:19) en cas de besoin (node:internal/modules/cjs/helpers:110:18) en objet. (C:UtilisateursSWETTAOneDriveDesktopblog_backendindex.js:9:20)

Quelle est la solution ?

P粉242535777P粉242535777182 Il y a quelques jours331

répondre à tous(2)je répondrai

  • P粉457445858

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

    Le problème vient de votre fichier de contrôleur, vous exportez une fonction appelée post et l'importez en tant que createBlog dans votre fichier de routes. Pour corriger votre code vous devez mettre à jour votre contrôleur et renommer la fonction en 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"
            })
        }
    }
    

    répondre
    0
  • P粉099145710

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

    J'ai trouvé un petit bug dans le code de votre routeur.
    Vous exportez la fonction en tant que contenu de post ,并将其导入路由器中作为 createBlog 。并且您的控制器不会导出任何名为 createBlog dans votre contrôleur, d'où la question.

    Changez simplement le code de votre routeur pour :

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

    répondre
    0
  • Annulerrépondre