mongodb 中的错误“ Route.post() 需要回调函数但得到 [object Undefined]”
这是我的主文件 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”命令后,终端中仍然显示以下错误
[email protected] dev nodemon index.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
抛出新错误(msg);
^
错误:Route.post() 需要回调函数,但收到 [object Undefined] at Route。[作为帖子](C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\route.js:211:15) at proto。[作为帖子](C:\Users\SWETTA\OneDrive\Desktop\blog_backend\node_modules\express\lib\router\index.js:521:19) at Object。 (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\routes\blogRoutes.js:6:8) 在 Module._compile (node:internal/modules/cjs/loader:1254:14) 在 Module._extensions..js (node:internal/modules/cjs/loader:1308:10) 在 Module.load (node:internal/modules/cjs/loader:1117:32) 在 Module._load (node:internal/modules/cjs/loader:958:12) 在 Module.require (node:internal/modules/cjs/loader:1141:19) 在 require (node:internal/modules/cjs/helpers:110:18) 在 Object. (C:\Users\SWETTA\OneDrive\Desktop\blog_backend\index.js:9:20)
解决方案是什么?
我发现您的路由器代码中有一个小错误。
您在控制器中将函数导出为
post
,并在路由器中将其导入为
createBlog
。并且您的控制器没有导出任何名为
createBlog
的内容,因此存在问题。
只需将路由器代码更改为此:
const express = require("express");
const router = express.Router();
const {post} = require("../controlers/createBlog");
router.post("/createBlog",post);
module.exports = router;
问题出在您的控制器文件中,您正在以名称 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"
})
}
}
错误消息表明问题出在控制器文件中的 post 方法上。具体来说,您的 routes/blogRoutes.js 文件中的 createBlog 似乎没有从您的 controllers/createBlog.js 文件中正确导入控制器函数 createBlog。
在您的 controllers/createBlog.js 文件中,该函数被导出为 exports.post。但是,在您的 routes/blogRoutes.js 文件中,您将其导入为 const {createBlog} = require("../controlers/createBlog");。这里的关键是您正在导入 createBlog,但控制器文件中的实际函数称为 post。