首頁  >  問答  >  主體

mongodb 中的錯誤:“Route.post() 需要一個回呼函數,但收到了一個”

這是我的主檔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>`);
})

這是我的路線

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

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

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

module.exports = router;

這是我的控制器檔案

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

這是我的模型檔案

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

我安裝了nodemon和mongoose,但在寫入「npm run dev」指令後仍然在終端機中顯示錯誤

[電子郵件受保護] 開發者 Nodemon索引.js

[nodemon] 2.0.22 【nodemon】隨時重啟,輸入rs [nodemon] 監視路徑:.# [nodemon] 觀看擴充:js,mjs,json [nodemon] 啟動 node index.js C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\route.js:211 拋出新的錯誤(訊息); ^

錯誤:Route.post() 需要一個回呼函數,但得到一個 [物件未定義] 在路線。 [作為帖子] (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\route.js:211:15) 在原型。 [作為帖子] (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\index.js:521:19) 在對象。 (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\routes\blogRoutes.js:6:8) 在 Module._compile (節點:內部/模組/cjs/loader:1254:14) 在 Module._extensions..js (節點:內部/模組/cjs/loader:1308:10) 在Module.load(節點:內部/模組/cjs/loader:1117:32) 在 Module._load (節點:內部/模組/cjs/loader:958:12) 在 Module.require (節點:內部/模組/cjs/loader:1141:19) 在需要時(節點:內部/模組/cjs/helpers:110:18) 在對象。 (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\index.js:9:20)

解決辦法是什麼?

P粉242535777P粉242535777182 天前328

全部回覆(2)我來回復

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

    回覆
    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;

    回覆
    0
  • 取消回覆