Node.js+Fastify架构中无法跨文件调用嵌套控制器函数
问题分析与解决
问题根源
你写的AuthController是一个工厂函数,它本身不是包含方法的对象,而是需要被调用(传入UserRepository依赖)后,才会返回带有getUserOne方法的对象的函数。你在路由里直接访问AuthController.getUserOne,相当于试图访问这个工厂函数的静态属性,但工厂函数本身并没有这个属性,所以会找不到该方法。
修正方案
需要先调用工厂函数,传入UserRepository实例,得到真正的控制器对象,再用这个对象调用方法。
修正后的路由文件代码
import AuthController from "../controllers/AuthController.js"; import { UserRepository } from "../repositories/UserRepository.js"; // 调用工厂函数,传入依赖,生成控制器实例 const authController = AuthController(UserRepository); export function Auth(f, opts, done) { f.post('/register', {}, authController.getUserOne); done(); }
补充说明
工厂函数的设计是为了实现依赖注入,方便后续替换依赖(比如测试时用模拟的UserRepository),但必须正确执行调用步骤才能拿到可用的控制器实例,不能直接把工厂函数当作实例对象来使用。
内容的提问来源于stack exchange,提问作者yigitozmen
相关产品推荐
相关产品推荐

