You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express+MongoDB报错:Route.post()需回调函数却获Undefined的解决方法

错误解决方案:Route.post() requires a callback function but got a [object Undefined]

问题根源

路由文件中尝试导入的createBlog控制器函数不存在,因为控制器文件导出的函数名称是post,两者名称不匹配,导致传递给router.post()的是undefined,触发Express的路由回调校验错误。

修复步骤

1. 统一控制器与路由的导出/导入名称

方案一:修改控制器文件(controlers/createBlog.js)
将导出的函数名改为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 successfully",
            data:response
        })
    }
    catch(error) {
        console.error(error);
        res.status(500).json({
            status:false,
            message:error.message,
            data:"Server issue"
        })
    }
}

方案二:修改路由文件(routes/blogRoutes.js)
导入控制器中实际导出的post函数:

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

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

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

module.exports = router;

2. 修复控制器变量拼写错误

控制器catch块中console.error(err)的err未定义,需改为error(与catch参数名一致),避免后续触发新错误。

3. 修正主文件端口日志

主文件(index.js)中app.listen的日志写死了3000端口,改为使用实际的port变量:

app.listen(port, () => {
    console.log(`App running on port ${port}`);
})

额外检查项

  • 确认文件夹拼写:路由中导入控制器的路径../controlers/createBlog,若实际文件夹名为controllers(标准拼写),需修正路径。
  • 环境变量配置:确保.env文件中端口变量为PORT(通常环境变量用大写),避免process.env.port获取不到值。

内容的提问来源于stack exchange,提问作者SANTI SINGHA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:42:25