Я узнаю TypeORM , я создал проект из его Quick Start документации, включая ту же иерархию папок, я выполнил все шаги и был создан проект это сработало правильно. Но у созданного стандартного проекта есть только 1 маршрут, который представляет собой User с его контроллером и его сущностью, имеющую в своем основном файле следующее объявление:
index.ts
import {Routes} from "./routes";
createConnection().then(async connection => {
// create express app
const app = express();
app.use(bodyParser.json());
// register express routes from defined application routes
Routes.forEach(route => {
(app as any)[route.method](route.route, (req: Request, res: Response, next: Function) => {
const result = (new (route.controller as any))[route.action](req, res, next);
if (result instanceof Promise) {
result.then(result => result !== null && result !== undefined ? res.send(result) : undefined);
} else if (result !== null && result !== undefined) {
res.json(result);
}
});
});
...
user.ts - (Entity)
import {UserController} from "../controller/UserController";
export const Users = [{
method: "get",
route: "/users",
controller: UserController,
action: "all"
}, {
method: "get",
route: "/users/:id",
controller: UserController,
action: "one"
}, {
method: "post",
route: "/users",
controller: UserController,
action: "save"
}, {
method: "delete",
route: "/users/:id",
controller: UserController,
action: "remove"
}];
UserController.ts
import {getRepository} from "typeorm";
import {NextFunction, Request, Response} from "express";
import {Users} from "../entity/User";
export class UserController {
private userRepository = getRepository(Users);
async all(request: Request, response: Response, next: NextFunction) {
return this.userRepository.find()
}
async one(request: Request, response: Response, next: NextFunction) {
return this.userRepository.findOne(request.params.id);
}
async save(request: Request, response: Response, next: NextFunction) {
return this.userRepository.save(request.body);
}
async remove(request: Request, response: Response, next: NextFunction) {
let userToRemove = await this.userRepository.findOne(request.params.id);
await this.userRepository.remove(userToRemove);
}
}
Мои сомнения будут следующими:
Есть ли способ go с этой структурой с более чем одним маршрутом или этот шаблон только для 1 маршрута?
Если есть возможность продолжить с этой структурой, как бы вы, например, объявили другой маршрут?