构造函数方法未在 Typescript 中设置属性
Contructor method isnt setting an attribute in Typescript
我正在使用 typescript 和 typeorm;
我在这里创建了一个存储库 class,它使用 typeorm 中的方法,然后我在我的控制器 class 中使用一个构造函数来获取这个存储库作为一个属性,但由于某些原因它没有在我的其他方法中识别 this.teamRepo,虽然当我在我的构造函数中 console.log(this.teamRepo) 或在它工作的 cosntructor 中调用 repo 方法时,当我在我的 [=34 之外创建一个常量时=] 或在方法内部它也工作正常;
第一段代码是我尝试工作的方式,调用 teamRepo 作为我的控制器的属性 class,第二段代码是我如何获得它的示例 运行 而且我不知道它以一种方式起作用但以另一种方式不起作用:
欢迎任何帮助:)
class TeamController {
private teamRepo: TeamRepository;
constructor() {
const repo = new TypeOrmTeamRepo();
this.teamRepo = new TeamRepository(repo);
// console.log(this.teamRepo) ==> recieve corret
}
public async addTeam(request: Request, response: Response) {
try {
// console.log(this.teamRepo) ==> recieve undefined
const { teamName } = request.body;
const newTeam = await this.teamRepo.create(teamName);
console.log(newTeam);
return response.json(newTeam)
} catch(error) {
console.log(error);
return response.status(404).json(error);
}
}
};
const teamRepo: TeamRepository = new TeamRepository(new TypeOrmTeamRepo()); //here
class TeamController {
public async addTeam(request: Request, response: Response) {
try {
const teamRepo: TeamRepository = new TeamRepository(new TypeOrmTeamRepo()); //or here
const { teamName } = request.body;
const newTeam = await teamRepo.create(teamName););
console.log(newTeam);
return response.json(newTeam)
} catch(error) {
console.log(error);
return response.status(404).json(error);
}
}
};
存储库代码如下:
class TeamRepository implements IBaseTeamRepo {
private repository: IBaseTeamRepo;
constructor(repository: IBaseTeamRepo) {
this.repository = repository;
}
public async create(team: BaseTeamModel): Promise<any> {
return await this.repository.create(team);
}
}
export default class TypeOrmTeamRepo implements IBaseTeamRepo {
public async create(newTeamName: string): Promise<any> {
try {
const teamRepo = await getRepository(Team);
console.log(newTeamName);
const newTeam = await teamRepo.create({
teamName: newTeamName
});
await teamRepo.save(newTeam);
return newTeam;
} catch(error) {
return error;
}
}
};
和接口:
interface BaseTeamModel {
teamName: string;
};
interface IBaseTeamRepo {
create(BaseTeamModel): Promise<any>;
};
export {
BaseTeamModel,
IBaseTeamRepo,
}
这里是 routes.ts:
const teamController = new TeamController();
const adminRoutes = express.Router();
adminRoutes.post("/", teamController.addTeam);
似乎问题出在我调用 addTeam 的方式上,它在错误的范围内,所以没有识别出 this.teamRepo 正确的 wya,感谢 Chistoph 的帮助:
只需要将routes.ts改为:
const teamController = new TeamController();
const adminRoutes = Router();
adminRoutes.post("/", (request: Request, response: Response) => {
return teamController.addTeam(request, response);
});
我正在使用 typescript 和 typeorm;
我在这里创建了一个存储库 class,它使用 typeorm 中的方法,然后我在我的控制器 class 中使用一个构造函数来获取这个存储库作为一个属性,但由于某些原因它没有在我的其他方法中识别 this.teamRepo,虽然当我在我的构造函数中 console.log(this.teamRepo) 或在它工作的 cosntructor 中调用 repo 方法时,当我在我的 [=34 之外创建一个常量时=] 或在方法内部它也工作正常;
第一段代码是我尝试工作的方式,调用 teamRepo 作为我的控制器的属性 class,第二段代码是我如何获得它的示例 运行 而且我不知道它以一种方式起作用但以另一种方式不起作用:
欢迎任何帮助:)
class TeamController {
private teamRepo: TeamRepository;
constructor() {
const repo = new TypeOrmTeamRepo();
this.teamRepo = new TeamRepository(repo);
// console.log(this.teamRepo) ==> recieve corret
}
public async addTeam(request: Request, response: Response) {
try {
// console.log(this.teamRepo) ==> recieve undefined
const { teamName } = request.body;
const newTeam = await this.teamRepo.create(teamName);
console.log(newTeam);
return response.json(newTeam)
} catch(error) {
console.log(error);
return response.status(404).json(error);
}
}
};
const teamRepo: TeamRepository = new TeamRepository(new TypeOrmTeamRepo()); //here
class TeamController {
public async addTeam(request: Request, response: Response) {
try {
const teamRepo: TeamRepository = new TeamRepository(new TypeOrmTeamRepo()); //or here
const { teamName } = request.body;
const newTeam = await teamRepo.create(teamName););
console.log(newTeam);
return response.json(newTeam)
} catch(error) {
console.log(error);
return response.status(404).json(error);
}
}
};
存储库代码如下:
class TeamRepository implements IBaseTeamRepo {
private repository: IBaseTeamRepo;
constructor(repository: IBaseTeamRepo) {
this.repository = repository;
}
public async create(team: BaseTeamModel): Promise<any> {
return await this.repository.create(team);
}
}
export default class TypeOrmTeamRepo implements IBaseTeamRepo {
public async create(newTeamName: string): Promise<any> {
try {
const teamRepo = await getRepository(Team);
console.log(newTeamName);
const newTeam = await teamRepo.create({
teamName: newTeamName
});
await teamRepo.save(newTeam);
return newTeam;
} catch(error) {
return error;
}
}
};
和接口:
interface BaseTeamModel {
teamName: string;
};
interface IBaseTeamRepo {
create(BaseTeamModel): Promise<any>;
};
export {
BaseTeamModel,
IBaseTeamRepo,
}
这里是 routes.ts:
const teamController = new TeamController();
const adminRoutes = express.Router();
adminRoutes.post("/", teamController.addTeam);
似乎问题出在我调用 addTeam 的方式上,它在错误的范围内,所以没有识别出 this.teamRepo 正确的 wya,感谢 Chistoph 的帮助:
只需要将routes.ts改为:
const teamController = new TeamController();
const adminRoutes = Router();
adminRoutes.post("/", (request: Request, response: Response) => {
return teamController.addTeam(request, response);
});