Next.js用next-connect加post端点报handlers[(i++)] is not a function如何解决
报错原因及解决方案
这个TypeError: handlers[(i++)] is not a function报错本质是next-connect执行请求处理链时,读取到了非函数类型的处理逻辑,并非next-connect本身的bug,常见触发原因和排查方向如下:
- 导入的
createUser实际不是可执行函数
即使你确认该函数在其他路由可用,也需要先核对导入逻辑:检查api-lib/controllers/authController中createUser是命名导出还是默认导出,是否存在导入写法和导出规则不匹配的情况,比如默认导出却用了命名导入语法,会导致拿到的createUser为undefined,触发该报错。 - next-connect版本API不兼容
如果你使用的是next-connect v1.x版本,和v0.x版本的调用规则存在差异:v1.x不再支持旧版本的部分链式调用写法,导出时也需要用.handler()包裹。可以先打印route.post确认该方法存在且为函数,排除版本适配问题。 - 中间件返回值异常
确认restrictTo('admin')的返回值为标准的Next.js API中间件函数(接收req、res、next三个入参),如果该函数在POST请求场景下返回非函数值,也会打断处理链触发报错。
你可以用最简处理函数替换createUser做验证:
route.use(protect) .use(restrictTo('admin')) .get(getAllUsers) .post((req, res) => res.status(200).json({ status: 'success' }))
如果上述代码运行正常,即可确定问题出在createUser的导入或定义逻辑上。
内容的提问来源于stack exchange,提问作者ABDULLOKH MUKHAMMADJONOV
相关产品推荐
相关产品推荐

