Erreur dans mongodb : "Route.post() attendait une fonction de rappel mais en a reçu une"
P粉242535777
P粉242535777 2024-04-02 14:46:18
0
2
472

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粉242535777
P粉242535777

répondre à tous(2)
P粉457445858

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"
        })
    }
}
P粉099145710

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;
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal