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