@historydev
Острая аллергия на анимешников

Как можно передать класс чтобы express подхватил методы post, put и т.д?

Допустим вот такой класс, как я могу применить его к экспрессу чтобы все методы которые существуют как http методы попали в роутер express?

export class CallController {

	private _calls?: QueryModel;

	constructor() {
		this.init().then();
	}

	public async post(req: Request, res: Response, next: NextFunction): Promise<void> {
		if(req.body) {
			const call = await this._calls?.collection.findOne({type: req.body.type, members: {$in: req.body.members}});

			if(!call) {
				await this._calls?.collection.insertOne(req.body);
				return;
			}

			await this._calls?.collection.updateOne({id: req.body.id}, {time: req.body.time, expert: req.body.expert});

		}
	}

	async init(): Promise<void> {
		this._calls = await query('calls');
	}

}
  • Вопрос задан
  • 37 просмотров
Пригласить эксперта
Ответы на вопрос 1
@historydev Автор вопроса
Острая аллергия на анимешников
Не знаю насколько это корректно, я реализовал вот так, скорее всего можно лучше, если есть идеи, я бы почитал:
export class CallController {

	private _calls?: QueryModel;

	constructor(router: IRouter, route_name: string) {
		this.init().then(_ => {
			this.handle_http_methods_for_route(router, route_name);
		});
	}

	public async post(req: Request, res: Response, next: NextFunction): Promise<void> {
		if(req.body) {

			console.log(this._calls);

			const call = await this._calls?.collection.findOne({type: req.body.type, members: {$in: req.body.members}});

			if(!call) {
				await this._calls?.collection.insertOne(req.body);
				return;
			}

			await this._calls?.collection.updateOne({id: req.body.id}, {time: req.body.time, expert: req.body.expert});

		}
	}

	private handle_http_methods_for_route(router: IRouter, route_name: string) {
		router.route(route_name).post(this.post.bind(this));
	}

	async init(): Promise<void> {
		this._calls = await query('calls');
	}

}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект