使用next-connect报TypeError默认导出非函数错误如何解决
报错原因
该报错由next-connect版本不兼容导致:你参考的教程基于v0.x版本的next-connect编写,该版本支持默认导出;而你本地安装的是v1.0及以上的新版本,新版本重构了整体API,移除了默认导出规则,沿用旧版导入写法就会触发“导入对象不是函数”的类型错误。
修复方法
二选一即可:
- 适配v1.x新版本写法(长期使用推荐)
调整导入、初始化、导出的逻辑,匹配新版API规范,修改后完整代码如下:// 替换原有的默认导入为命名导入 import { createRouter } from 'next-connect'; import Product from '../../../models/Product'; import db from '../../../utils/db'; // 替换原有的nc()初始化方式 const router = createRouter(); router.get(async (req, res) => { await db.connect(); const products = await Product.find({}); await db.disconnect(); res.send(products); }); // 新版需要调用.handler()方法生成最终的请求处理函数导出 export default router.handler({ // 可按需配置错误处理、路径不匹配处理逻辑 onError: (err, req, res) => { res.status(500).end(err.message); }, onNoMatch: (req, res) => { res.status(404).end("Route not found"); } }); - 降级到老版本和教程对齐
如果不想修改现有代码,直接将依赖降级到教程使用的v0.12.2版本即可,执行对应包管理工具的安装命令:
安装完成后重启Next.js开发服务,原有代码无需改动即可正常运行。# npm npm install next-connect@0.12.2 # yarn yarn add next-connect@0.12.2 # pnpm pnpm add next-connect@0.12.2
提示:修改依赖或代码后必须重启开发服务,清除构建缓存才能生效。
内容的提问来源于stack exchange,提问作者wail
相关产品推荐
相关产品推荐

