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

Express调用validateReview中间件报错TypeError: next() is not a function

错误原因

你编写的两个校验中间件本身逻辑不存在问题,next is not a function报错的本质是validateReview被调用时,没有接收到Express自动注入的next参数,问题出在你注册使用validateReview的路由代码中:

  • 最常见的原因是你在路由中使用validateReview时额外加了括号,相当于直接主动执行了函数,而非把函数作为中间件传入,这种情况下不会自动注入req/res/next三个参数,导致next为undefined。
  • 另一种可能是validateReview在路由参数中的顺序错误,比如放在了业务请求处理函数之后,Express不会给错误处理中间件之外的后置函数传入next参数。
解决方法
  1. 检查所有用到validateReview的路由配置,确保你是直接传入函数引用,没有主动调用:
// 错误写法,加括号主动调用了函数
app.post('/campgrounds/:id/reviews', validateReview(), (req, res) => {
  // 业务逻辑
})

// 正确写法,直接传入函数引用,由Express自动执行并注入参数
app.post('/campgrounds/:id/reviews', validateReview, (req, res, next) => {
  // 业务逻辑
})
  1. 确认validateReview的位置在路由的业务处理函数之前,符合Express中间件的执行顺序要求。
  2. 若排查后仍未解决,可在validateReview函数首行打印参数确认传入情况:
const validateReview = (req, res, next) => {
  console.log('next类型:', typeof next)
  // 原有校验逻辑
}

如果打印结果为function说明参数传入正常,可进一步校验schema逻辑是否异常,如果为undefined则可以确定是路由注册环节的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:36:01