next-connect报错TypeError: resolver is not a function该如何解决
错误原因
该报错是next-connect配置和Next.js文件路由规则冲突导致的,核心有两个问题:
- 你初始化
next-connect实例时没有开启路由匹配模式,默认状态下next-connect不会处理.get()等方法传入的路径参数,只接受直接传入处理函数。 - 路由路径配置重复:Next.js API路由的路径由文件位置决定,不需要在
next-connect的方法中重复写文件对应的路径前缀。
解决步骤
1. 开启next-connect路由匹配能力
修改handler的实现代码,在创建nc实例时新增router: true配置项:
return nc<NextIronRequest, NextApiResponse>({ router: true, // 新增这行开启路由匹配 onError: (err, _, res) => { error(err) res.status(500).end(err.toString()) }, })
2. 修正路由路径配置
根据你的API文件存放位置调整路径前缀:
如果你的路由定义存放在/pages/api/twitter.ts或者/pages/api/twitter/[...index].ts(catch-all动态路由)文件中,去掉路径中的/twitter前缀即可:
export default handler() .get('/generate-auth-link', generateAuthLink) .get('/get-verifier-token', getVerifierToken)
3. 可选校验
确认generateAuthLink和getVerifierToken两个处理函数的导出方式正确,是符合(req: NextIronRequest, res: NextApiResponse) => void | Promise<void>格式的函数。
修改完成后重启开发服务,请求/api/twitter/generate-auth-link即可正常返回结果。
内容的提问来源于stack exchange,提问作者deadcoder0904
相关产品推荐
相关产品推荐

