Node.js使用module.exports导出模块报Route.get()回调错误如何解决
报错根因
你在user.controller.js中导出的是userController构造函数本身,而非函数执行后返回的控制器实例对象。路由文件导入后直接访问userController.getUser,相当于对函数本身取不存在的getUser属性,得到的就是undefined,不符合express路由要求传入回调函数的规则,因此触发报错。
修复方案
你可以任选以下任意一种方式修改:
方案1:直接修改控制器文件的导出逻辑,导出实例化后的控制器对象
调整user.controller.js末尾的导出代码即可,其他代码无需改动:// user.controller.js 仅修改导出行 module.exports = userController()该方案适合不需要重复创建控制器实例的场景,也是大部分业务项目的常用写法。
方案2:修改路由文件的导入逻辑,先执行构造函数拿到实例再调用方法
调整user.routes.js的导入和使用逻辑:// user.routes.js const express = require('express') const router = express.Router() // 导入控制器构造函数 const userControllerGenerator = require('../controllers/user.controller') // 执行构造函数拿到控制器实例 const userController = userControllerGenerator() router.get('/info', userController.getUser) module.exports = router该方案适合需要多次创建不同控制器实例的场景。
内容的提问来源于stack exchange,提问作者Manishkumar Adesara
相关产品推荐
相关产品推荐

