You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:30:26