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

运行Node.js服务器遇Route.post()回调未定义错误求助

问题解决:Route.post() requires a callback function but got a [object Undefined]

错误日志

Node.js v20.11.0
PS C:\Users\Edward Akande\mern-boilerplate\backend> node Server.js
C:\Users\Edward Akande\mern-boilerplate\backend\node_modules\express\lib\router\route.js:216
        throw new Error(msg);
        ^

Error: Route.post() requires a callback function but got a [object Undefined]
    at Route.<computed> [as post] (C:\Users\Edward Akande\mern-boilerplate\backend\node_modules\express\lib\router\route.js:216:15)
    at proto.<computed> [as post] (C:\Users\Edward Akande\mern-boilerplate\backend\node_modules\express\lib\router\index.js:521:19)
    at Object.<anonymous> (C:\Users\Edward Akande\mern-boilerplate\backend\routes\auth.js:10:8)
    at Module._compile (node:internal/modules/cjs/loader:1376:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at Module.require (node:internal/modules/cjs/loader:1235:19)
    at require (node:internal/modules/helpers:176:18)
    at Object.<anonymous> (C:\Users\Edward Akande\mern-boilerplate\backend\Server.js:15:22)

错误原因

报错指向auth.js第10行的注册路由:router.post('/register', registerValidation, async (req, res) => {}),核心问题是你导入的registerValidation不存在——当前middleware/validation.js仅导出了一个JWT验证中间件,完全没有定义注册表单验证的registerValidation函数,导致传入Route.post的第二个参数是undefined,触发Express的路由回调必填校验。

修复方案

1. 更新middleware/validation.js,添加注册验证规则并规范导出

将原有的单一导出改为命名导出,新增registerValidation验证规则:

const jwt = require('jsonwebtoken');
const User = require('../models/user.js');
const { body } = require('express-validator');

// 注册表单验证规则:校验邮箱格式、密码长度
exports.registerValidation = [
  body('email').isEmail().withMessage('请输入有效的邮箱地址'),
  body('password').isLength({ min: 6 }).withMessage('密码长度至少为6位')
];

// JWT身份验证中间件(原有的验证逻辑)
exports.authMiddleware = async function (req, res, next) {
  const token = req.header('x-auth-token');

  if (!token) {
    return res.status(401).json({ msg: 'No token, authorization denied' });
  }

  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    const user = await User.findById(decoded.user.id);

    if (!user) {
      return res.status(401).json({ msg: 'Token is not valid' });
    }

    req.user = user;
    next();
  } catch (err) {
    console.error(err.message);
    res.status(500).json({ msg: 'Server Error' });
  }
};

2. (可选)修复User模型缺失字段

你的verify-code路由中用到了user.verificationCode,但当前User模型没有这个字段,需要在models/user.js中补充:

const userSchema = new mongoose.Schema({
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true },
  accountType: { type: String, enum: ['Admin', 'Paid', 'Free'], default: 'Free' },
  verified: { type: Boolean, default: false },
  verificationCode: { type: String } // 新增此字段
});

3. (可选)添加便捷启动脚本

在package.json中添加启动脚本,方便开发和生产环境使用:

"scripts": {
  "start": "node Server.js",
  "dev": "nodemon Server.js",
  "test": "echo \"Error: no test specified\" && exit 1"
}

内容的提问来源于stack exchange,提问作者Edward Akande

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:09:52