【发布时间】:2020-03-25 22:23:17
【问题描述】:
我正在尝试将类方法作为 Express 路由参数传递,我尝试绑定该方法并且不使用箭头函数,但它也不起作用。
我正在使用 TypeORM,我得到的错误是这个“连接“默认”未找到。”,但如果我将完整的函数(如下所示)作为参数编写,一切正常。
router.get("/", async (_req: Request, res: Response) => {
try {
const projects: Project[] = await new ProjectService().findAll();
res.status(200).send(projects);
} catch (e) {
res.status(404).send(e.message);
}
});
下面的代码不起作用。
ProjectRoutes.ts
const router: Router = Router();
const projectController = new ProjectController();
router.get("/", projectController.getAllProjects);
export default router;
ProjectController.ts
export class ProjectController {
projectService: ProjectService = new ProjectService();
getAllProjects = async (_req: Request, res: Response) => {
try {
const projects: Project[] = await this.projectService.findAll();
return res.status(200).send(projects);
} catch (e) {
return res.status(404).send(e.message);
}
};
}
ProjectService.ts
export class ProjectService {
projectRepository: ProjectRepository;
constructor() {
this.projectRepository = getCustomRepository(ProjectRepository);
}
async findAll(): Promise<Project[]> {
return await this.projectRepository.findAll();
}
}
项目库
@EntityRepository(Project)
export class ProjectRepository extends Repository<Project> {
async findAll(): Promise<Project[]> {
return await this.find();
}
}
路线索引.ts
const router: Router = Router();
router.use("/projects", ProjectRoutes);
export default router;
服务器.ts
app.use("/", router);
【问题讨论】:
-
您遇到了什么错误?
-
您将实例方法(使用箭头函数初始化的类字段)传递给路由器的方式应该没有问题。究竟是什么不起作用?
-
更新问题
-
@GabrielSouza 你检查过这个吗? github.com/typeorm/typeorm/issues/4010#issuecomment-502431460 似乎与您调用 findAll() 的方式有关。
-
如果我在 router.get 中编写完整的函数,它就可以工作,所以我认为 TypeORM 不是问题,除非我遗漏了什么,但我不知道可能是什么
标签: typescript express ecmascript-6 typeorm